我正在尝试通过调用以下内容列出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);
答案 0 :(得分:7)
我很确定您的问题与this article有关,它描述了什么是错误以及如何解决问题。网站上提供了一个可以安装的修补程序,可以解决您的问题。我希望这有帮助!
答案 1 :(得分:0)
根据Icemanind的回答,如果您正在编译.net应用程序,那么适用于我们的解决方案是将您的平台目标(从AnyCPU)更改为x64。
无需安装修补程序。