4

我注意到OpenFileDialog无法显示目录中的所有文件,这发生在我的应用程序以及其他Windows 本机程序中,例如任务管理器“新任务”“浏览”选项(使用OpenFileDialog控件),有谁知道原因和可能的解决方法为了那个原因?
即使以管理员身份运行任务管理器也没有修复它,所以它似乎不是由特权引起的

编辑:我现在知道这是由名为File System Redirector的 appcompat 功能引起的,显然我正在启动 32 位任务管理器以及我自己的应用程序,因此它向我展示了 32 位 system32 aka SysWOW64 文件夹(在 Windows 上谈论奇怪的命名方案7 64 位 System32 有 64 位文件,而 SysWOW64 有 32 位文件),似乎当您运行某个应用程序的 32 位版本时,您无法通过OpenFileDialog任何方式访问 64 位 System32 文件夹。

例如,在这里看到,它缺少 SnippingTool.exe(但不仅限于)

任务管理器打开文件对话框 虽然我确定它确实存在于目标位置
Windows资源管理器

4

1 回答 1

6

当您在 64 位版本的 Windows 上运行代码时会发生这种情况。导航栏显示您正在查看 c:\windows\system32。但是你实际上看到了 c:\windows\syswow64 的内容。当您导航到 c:\program 文件时,也会发生同样的事情。您实际上会看到 c:\program 文件 (x86) 的内容。没有 32 位版本的 SnippingTool.exe,因此列表中缺少它。

这是一个名为“文件系统重定向”的 appcompat 功能。旨在为 32 位程序提供在 64 位操作系统上生存的机会。

您可以通过允许您的程序作为 64 位进程运行来关闭它。右键单击您的 EXE 项目,属性,构建选项卡。将平台目标设置更改为 AnyCPU。在 VS2012 及更高版本上,取消选中“首选 32 位”选项。

于 2013-08-24T18:50:11.270 回答