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

use*_*240 4 .net c# 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);
Run Code Online (Sandbox Code Playgroud)

但是我在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);
Run Code Online (Sandbox Code Playgroud)

Ice*_*ind 6

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