2013-07-25 35 views
2

我正在编写一个将在Windows 7上运行的软件。我列出已安装的服务,获取服务图像路径位置并检查是否存在服务文件(Dll或Exe)。C#File.Exist(File_Path)即使File_Path为true,文件也存在,并且我有权访问该文件,但返回false

我正在用File.Exist(File_Path)检查文件位置。对于某些文件,即使文件路径为true,文件仍然存在,并且我有权访问该文件,但它返回false

我知道,即使该文件存在,如果用户没有访问权限File.Exist(File_Path)返回false。

例如,对于文件C:\Windows\System32\appmgmts.dll 返回true,但它的文件C:\Windows\System32\audiosrv.dll

返回false当我寻找Windows资源管理器下的这2个文件的用户权限,它们是完全一样的。 但File.Exist(File_Path)会为这些文件返回不同的答案。

我以管理员身份运行Visual Studio和Exe文件。

请给我一些关于这种奇怪行为的建议。

+5

我建议您在文件上尝试[File.ReadAllBytes](http://msdn.microsoft.com/en-us/library/system.io.file.readallbytes.aspx),然后发布消息导致'IOException'。这可能会给你比File.Exists简单的'False'更多的信息。 – Heinzi

+1

猜测:您的应用程序在64位系统上以32位模式运行。如果是这样,您的程序在C:\ Windows \ System32中看到的是Windows资源管理器显示为C:\ Windows \ SysWOW64的内容。您可以通过在C:\ Windows \ SysWOW64中查找(或创建)C:\ Windows \ System32中不存在的文件,然后尝试从C:\ Windows \ System32中打开它来检查该文件。 – hvd

+0

尝试'File.Exists(Path.Combine(Environment.SystemDirectory,“appmgmts.dll”)''File.Exists(Path.Combine(Environment.SystemDirectory,“audiosrv.dll”)' – Damith

回答

0

我修复了在使用我的域凭据创建的映射上检查文件时发生的类似问题。我正在以管理员身份调试VS。我能够通过Windows资源管理器导航到该文件,但不能与VS.

我解决了这个问题,当我关闭VS管理模式,并再次正常启动它。

相关问题