打开资源管理器窗口并等待它关闭

时间:2011-05-27 18:34:34

标签: c# windows process explorer

我有一个程序正在打开一个浏览器窗口到某个文件夹,但我想在浏览器窗口关闭后立即执行操作,但如果我使用以下代码:

Process proc = Process.Start("explorer.exe", "D:\\");
proc.WaitForExit();

它正在根据需要打开资源管理器窗口,但WaitForExit命令没有任何效果,它只是直接通过它。

是否有不同的方式打开资源管理器窗口,当用户关闭时,该窗口可以让我知道?

2 个答案:

答案 0 :(得分:7)

问题在The Old New Thing很好地解释了:

  

WaitForSingleObject立即返回的原因是Explorer是一个单实例程序(好的,有限实例)。当您打开资源管理器窗口时,请求将被移交给正在运行的资源管理器副本,并且您启动的资源管理器副本将退出。这就是你的WaitForSingleObject立即返回的原因。

他提供了一些你可能会使用的解决方案(大量使用PInvoke),比如使用像this这样的东西。

最后,您可能更容易使用其他类型的文件浏览器,可能来自您可以更好地控制的C#库,而不是资源管理器。

答案 1 :(得分:3)

无法重新生成错误。试过这个:

Process.Start("explorer.exe", "D:\\").WaitForExit();

并阻止当前线程并等待我关闭资源管理器窗口。确保您没有在要阻止的其他线程上执行命令。另外,请确保通过导入以下.reg文件设置窗口的每个实例以启动explorer.exe的新实例:

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
"DesktopProcess"=dword:00000001
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer]
"DesktopProcess"=dword:00000001
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\BrowseNewProcess]
"BrowseNewProcess"="Yes"
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\BrowseNewProcess]
"BrowseNewProcess"="Yes"

您需要重新启动计算机才能生效。