使用VS 15,C#和.Net 4.5.2
计算机位于AD网络上,广告名称为" AD"
AD正常用户权限,AD管理员权限和本地管理员权限会发生此问题。程序获得的权利并不重要,同样的问题也会发生。
我们的测试文件是" C:/windows/system32/conhost.exe "。
上面的文件存在,它是非常存在的。我可以用资源管理器看到它。
你可以看到它在那里,对吧? 以下cmd命令检查文件是否存在:
IF EXIST "C:\windows\system32\conhost.exe" (echo does exist) ELSE (echo doesnt exist)
它返回" 确实存在"正如所承诺的那样。
以下C#代码检查文件是否存在:
FileInfo file = new FileInfo("C:/windows/system32/conhost.exe");
MessageBox.Show(file.Exists + "");
这将返回" 错误"。
此代码还会返回" False ":
MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");
此代码也找不到它:
foreach (string file in Directory.GetFiles("C:/windows/system32/"))
{
//conhost is NEVER mentioned, like it doesn't exist
}
此代码也找不到它:
foreach (string file in Directory.EnumerateFiles("C:/windows/system32/"))
{
//conhost is NEVER mentioned, like it doesn't exist
}
假,假,假:
MessageBox.Show(File.Exists("C:/windows/system32/conhost.exe") + "");
MessageBox.Show(File.Exists("C:\\windows\\system32\\conhost.exe") + "");
MessageBox.Show(File.Exists(@"C:\windows\system32\conhost.exe") + "");
我做错了什么? 额外注意:我将conhost复制到C:\ conhost.exe,我的程序可以毫无问题地找到它。我的程序还在system32中找到其他文件,只是没有conhost和其他一些文件。例如,它找到" connect.dll"这是在system32中,所以它不是目录的读取权限 更多额外注意事项:conhost.exe和connect.dll具有相同的安全属性(文件属性中的“安全”选项卡)。
答案 0 :(得分:40)
如果您使用的是x64系统,则x86和x64应用程序的c:\Windows\System32
目录的内容会有所不同。请确保您使用的是运行批处理文件和C#应用程序的相同架构。
答案 1 :(得分:10)
在System.IO.File.Exists(path)的MSDN文档中,它指出:
如果来电者有 没有足够的权限来读取指定的文件,没有 抛出异常,无论如何,该方法都返回false 道路的存在。
出于这个原因,我们可以安全地假设您的应用程序没有对该特定文件的读访问权。如果尚未执行此操作,请检查安全设置并授予读取权限。
构建应用程序(在发布模式下)并以管理员身份运行。
答案 2 :(得分:1)
这是64位操作系统中遇到的问题...这里可以解决,
转到项目的属性>单击“构建”选项卡>取消选中“首选32位”
之后,它应该可以在64位操作系统上正常工作。