2011-07-07 58 views
4

我试图列出Windows 7下的所有文件在C:\ Windows \ System32 \ oobe \信息\背景通过调用如下因素:找不到路径的一部分'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 \信息\背景

我验证了该文件夹存在并且有文件,我在命令提示符下对其进行了cd化,并且一切正常,但c#调用失败。

在C:\ Windows \ System32 \ oobe \上调用GetFiles虽然工作正常。就文件夹属性而言,\ oobe和\ info之间没有什么不同。

经过进一步调查,这看起来像一个64位问题。当我为“AnyCpu”构建项目时,找到的文件夹没有问题。问题是我的项目需要编译x86而不是AnyCpu,因为依赖关系。

SOLUTION: 看起来像这是一个已知的问题,MS已经为它发布了一个修补程序。问题是由于文件系统重定向。

我现在调用线程上禁用重定向有以下几点:

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

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

我对Window的权限结构知之甚少,但却是所有用户都可读的文件夹?你的应用程序在什么权限下运行? – Grambot

+4

您的字符串中只有单个\字符。错字? – tinman

+0

这只是一个错误,当我的代码复制到这个web窗体时,反斜杠被正确转义 – user577240

回答

7

我敢肯定你的问题是关系到this article描述出了什么问题,如何解决这个问题。网站上有一个可以安装的修补程序,可以解决您的问题。我希望这有帮助!

+0

来避免'\\'所有斜杠。这就是问题所在。而不是按照文章的建议应用修补程序,而是通过调用以下命令禁用文件系统重定向:[DllImport(“kernel32.dll”,SetLastError = true)] public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr); – user577240

+0

@ User577240 - 很高兴帮助您解决问题! – Icemanind

+0

非常感谢icemanind。 – user577240

0

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

无需安装修补程序。

相关问题