我试图在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)