我正在尝试使用C#计算位置%system%\ drivers \中的某些文件的sha1哈希值。我知道文件位于确切的位置但是当我使用
时FILE.Exists("c:\\Windows\\System32\\Drivers\\1394ohci.sys")
它总是回复虚假。
C:\Users\administrator>dir c:\Windows\System32\drivers\1394ohci.sys
Volume in drive C has no label.
Volume Serial Number is 5A4F-1E60
Directory of c:\Windows\System32\drivers
11/21/2010 08:53 AM 229,888 1394ohci.sys
1 File(s) 229,888 bytes
0 Dir(s) 19,521,245,184 bytes free
C:\Users\administrator>fciv -sha1 c:\Windows\system32\drivers\1394ohci.sys
//
// File Checksum Integrity Verifier version 2.05.
//
c:\windows\system32\drivers\1394ohci.sys\*
Error msg : The system cannot find the path specified.
Error code : 3
我甚至在文件上尝试了fciv.exe,它也生成了相同的输出。我尝试将命令作为administratror运行,但它没有帮助。
我做了很多网络搜索,但没有任何效果。请帮忙,让我知道如何解决这个问题。
感谢您的帮助。 谢谢,
答案 0 :(得分:4)
如果我理解您的问题,那么您需要查看File System Redirector
对于64位应用程序,%windir%\ System32目录为
reserved
。 当64位版本的DLL时,大多数DLL文件名都没有更改 创建,所以32位版本的DLL存储在一个 不同的目录。WOW64
使用文件隐藏此差异 系统重定向器。在大多数情况下,只要32位应用程序尝试访问 %windir%\ System32,访问权限被重定向到%windir%\ SysWOW64 。 %windir%\ lastgood \ system32的访问权限被重定向到 %WINDIR%\ lastgood \ SysWOW64中。访问%windir%\ regedit.exe是 重定向到%windir%\ SysWOW64 \ regedit.exe。
如果你可以尝试那个
,页面底部还有一些小样本string system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32");
if(Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
{
// For 32-bit processes on 64-bit systems, %windir%\system32 folder
// can only be accessed by specifying %windir%\sysnative folder.
system32Directory = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative");
}
答案 1 :(得分:0)
以管理员模式运行程序。
答案 2 :(得分:0)
正如其他人所提到的,这是文件系统重定向器正在工作。解决方法是在文件路径中将 system32 替换为 sysnative 。
这也让我感到疯狂,找到简单的解决方法花了太多工作。我一直在使用高级脚本和复杂,模糊的切向相关解决方案登陆页面。所以我想我会分享"简易模式"。
答案 3 :(得分:-1)
来自http://msdn.microsoft.com/en-us/library/system.io.file.exists.aspx:
如果在尝试确定指定文件是否存在时发生任何错误,则Exists方法返回false。在引发异常的情况下会发生这种情况,例如传递带有无效字符或字符太多的文件名,磁盘失败或丢失,或者调用者没有读取文件的权限。