System.IO.File.Exists(@“C:\ Windows \ System32 \ SnippingTool.exe”)返回false

时间:2012-04-03 12:56:49

标签: .net windows-7 64-bit

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

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

2 个答案:

答案 0 :(得分:11)

这是64位Windows的一项功能。

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

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

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

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

答案 1 :(得分:3)

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

就我而言,只需更改项目属性>构建>取消选中首选32位