【发布时间】:2011-09-30 20:16:51
【问题描述】:
我正在尝试通过调用以下命令列出 Windows 7 上 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\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);
【问题讨论】:
-
我对 Window 的权限结构知之甚少,但所有用户都可以读取该文件夹吗?您的应用程序在什么权限下运行?
-
您的字符串中只有单个 \ 字符。错字?
-
这只是将我的代码复制到此 Web 表单时的错字,反斜杠已正确转义
-
@user577240 获取 info\ 的 DirectoryInfo 并执行 GetDirectories() 它可能会给你一个线索。
-
@terationx 我在 \oobe 下列出了目录,它只显示 en-US。但是 \oobe 也有一个 \info 子文件夹,由于某种原因没有显示。