【问题标题】:Could not find a part of the path 'C:\\Windows\\System32\\oobe\\info\\Backgrounds找不到路径的一部分 'C:\\Windows\\System32\\oobe\\info\\Backgrounds
【发布时间】:2011-09-30 20:16:51
【问题描述】:

我正在尝试通过调用以下命令列出 Windows 7 上 C:\Windows\System32\oobe\info\Backgrounds 下的所有文件:

const string logonScreenBackgroundPath = "C:\\Windows\\System32\\oobe\\info\\Backgrounds";
DirectoryInfo dInfo = new DirectoryInfo(logonScreenBackgroundPath);
string[] backgroundFiles = Directory.GetFiles(logonScreenBackgroundPath);

但是我在 GetFiles 调用中遇到异常:找不到路径的一部分 'C:\Windows\System32\oobe\info\Backgrounds

我验证了文件夹存在并且有文件,我在命令提示符下 cd 到它,一切都很好,但是 c# 调用失败。

在 C:\Windows\System32\oobe\ 上调用 GetFiles 可以正常工作。 \oobe 和 \info 之间的文件夹属性没有什么不同。

经过进一步调查,这看起来像是 64 位问题。当我为“AnyCpu”构建我的项目时,发现该文件夹没有问题。问题是由于依赖关系,我的项目必须为 x86 而不是 AnyCpu 编译。

解决方案: 看起来这是一个已知问题,MS 已针对它发布了修补程序。问题是由于文件系统重定向造成的。

我现在在调用线程上禁用重定向:

[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);

IntPtr ptr = new IntPtr();
bool isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr);

【问题讨论】:

  • 我对 Window 的权限结构知之甚少,但所有用户都可以读取该文件夹吗?您的应用程序在什么权限下运行?
  • 您的字符串中只有单个 \ 字符。错字?
  • 这只是将我的代码复制到此 Web 表单时的错字,反斜杠已正确转义
  • @user577240 获取 info\ 的 DirectoryInfo 并执行 GetDirectories() 它可能会给你一个线索。
  • @terationx 我在 \oobe 下列出了目录,它只显示 en-US。但是 \oobe 也有一个 \info 子文件夹,由于某种原因没有显示。

标签: c# .net windows-7


【解决方案1】:

我很确定您的问题与this article 有关,它描述了问题所在以及如何解决问题。该站点提供了一个修补程序,您可以安装该修补程序,并且应该可以解决您的问题。我希望这会有所帮助!

【讨论】:

  • 这就是问题所在。我没有像文章建议的那样应用修补程序,而是通过调用禁用文件系统重定向: [DllImport("kernel32.dll", SetLastError = true)] public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
  • 死链接+找不到=没用
【解决方案2】:

根据 Icemanind 的回答,如果您正在编译 .net 应用程序,对我们有用的解决方案是将您的平台目标(从 AnyCPU)更改为 x64。

无需安装修补程序。

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多