【问题标题】:The system cannot find the path specified该系统找不到指定的路径
【发布时间】:2012-02-05 05:53:17
【问题描述】:

我正在尝试使用 C# 从位置 %system%\drivers\ 计算某些文件的 sha1 哈希。我知道文件在确切的位置,但是当我使用时

FILE.Exists("c:\\Windows\\System32\\Drivers\\1394ohci.sys") 

它总是返回 false。

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,它也生成了相同的输出。我尝试以管理员身份运行该命令,但没有帮助。

我做了很多网络搜索,但没有任何效果。请帮助并告诉我如何解决此问题。

感谢您的帮助。 谢谢,

【问题讨论】:

  • 运行用户是否有1394ohci.sys的访问权限?
  • 您运行的是 64 位版本的 Windows 吗?如果是这样,文件系统重定向就开始了。这是一个 32 位应用程序,但您要求它在 64 位目录中查找。它会自动重定向到SysWOW64,它可能不包含1394ohci.sys
  • 首先,您对 nmjohn 的回答的评论属于问题评论。其次,将您的应用程序编译为 32 位应用程序。

标签: c# windows windows-7 sha1


【解决方案1】:

正如其他人所提到的,这是工作中的文件系统重定向器。解决方法是将文件路径中的 system32 替换为 sysnative

这也让我发疯了,找到简单的解决方法需要花费太多精力。我不断地登陆具有高级脚本和复杂、晦涩的相关解决方案的页面。所以我想我会分享“简单模式”。

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,那么您需要查看File System Redirector

    对于 64 位应用程序,%windir%\System32 目录是 reserved。 大多数 DLL 文件名在 64 位版本的 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");
    }
    

    【讨论】:

    • 为什么不告诉我们找不到的文件的路径?调试起来非常令人沮丧。
    【解决方案3】:

    来自http://msdn.microsoft.com/en-us/library/system.io.file.exists.aspx

    如果在尝试确定指定文件是否存在时发生任何错误,Exists 方法将返回 false。这可能发生在引发异常的情况下,例如传递包含无效字符或过多字符的文件名、磁盘故障或丢失,或者调用者没有读取文件的权限。

    【讨论】:

      【解决方案4】:

      以管理员模式运行您的程序。

      【讨论】:

      • 嗨小程格雷,是的,我使用的是 64 位版本的 Windows,是的 SysWOW64 不包含 1394ohci.sys 文件。我如何解决它?如何停止从代码重定向?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 2018-12-12
      • 2016-04-23
      相关资源
      最近更新 更多