找不到路径'C:\\ Windows \\ System32 \\ oobe \\ info \\ Backgrounds的一部分

时间:2011-07-07 21:46:25

标签: c# .net windows-7

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

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);

2 个答案:

答案 0 :(得分:7)

我很确定您的问题与this article有关,它描述了什么是错误以及如何解决问题。网站上提供了一个可以安装的修补程序,可以解决您的问题。我希望这有帮助!

答案 1 :(得分:0)

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

无需安装修补程序。