【问题标题】:System.IO.File.Exists(@"C:\Windows\System32\SnippingTool.exe") returns falseSystem.IO.File.Exists(@"C:\Windows\System32\SnippingTool.exe") 返回 false
【发布时间】:2012-04-17 03:14:06
【问题描述】:

所以我正在开发一个简单的 .NET 工作程序,但遇到了一些我无法弄清楚的奇怪障碍。该应用程序使用将应用程序添加到下拉菜单的配置文件。但是,在将其添加到菜单之前,它会执行 system.io.file.exists 以验证文件是否存在,至少在创建菜单时是这样。

但是,System.IO.File.Exists(@"C:\Windows\System32\SnippingTool.exe") 返回 false,但可执行文件在那里。同样,stikynot.exe 也返回 false。 system32 目录中的其他文件返回 true(如记事本)。我可以对这些应用程序进行归档,但我的 .net 程序无法读取它们并且 system.io.file.exists 返回 false。我没有运气检查了各种权限。它似乎与一些应用程序隔离,但我不知道为什么。

【问题讨论】:

  • 运行程序的帐户是否有权浏览到该位置?如果没有,您将在此调用中得到错误。
  • 是的,在那个目录下可以找到其他应用就好了。
  • Project + Properties,Compile选项卡,将Platform target改为AnyCPU。

标签: .net windows-7 64-bit


【解决方案1】:

这是 64 位 Windows 的一个功能。

在 x64 中,您有两个包含系统文件的文件夹:system32SysWOW64

如果您在 system32 中放入任何内容,所有 64 位 应用程序都会看到它。 SysWOW64 是出于兼容性原因 - 32 位(原文如此!)应用程序可以看到任何放入其中的内容。

所以就 .NET 而言,该文件不存在。它适用于记事本,因为 notepad.exe 存在于这两个目录中。

您可以测试这种行为。在其中一个目录中创建一个文本文件,而不是在另一个目录中创建一个文本文件并检查它是否存在。然后在 x86 和 x64 之间更改您的项目配置(右键单击解决方案 -> 配置管理器)并享受结果。

【讨论】:

  • 我无法相信这个困扰我一整天的问题。谢谢所以
【解决方案2】:

我有一个与此主题相关的疯狂错误。谢谢你。

在我的情况下,只需更改项目属性 > 构建 > 取消选中首选 32 位

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多