重新启动explorer.exe只会打开一个资源pipe理器窗口

问题

在一个batch file的一部分(types,请参阅额外信息)我需要重新启动资源pipe理器,所以我使用,试用和testing的方法

taskkill /f /im explorer.exe >nul explorer.exe 

然后这发生

  1. explorer.exe被成功终止
  2. explorer.exe启动(见图2),但只有一个资源pipe理器窗口打开,我无限期留下(见图1)

然后,我只能通过从任务pipe理器启动一个新的任务,正确地重新启动资源pipe理器,因为我假设Win + R是资源pipe理器的一部分。

额外的信息

现在,我说“kind of”,因为我正在使用WinRAR创build的自执行的SFX压缩文件运行batch file。 因此,执行时,归档的内容被提取到%temp%并且在成功提取时运行用户定义的文件(通常是boot-strapper,在这个例子中是我的batch file)。

到目前为止,我已经推断出

  1. explorer.exe肯定正在被完全杀死。
  2. batch file肯定会被调用并正确执行,因为它运行时脚本中的所有内容都按照devise工作,除了启动explorer.exe的行
  3. 重启浏览器的命令并不是“时间不准确”,或者其他任何事情,因为我试图拖延它。
  4. batch file在从存档中手动提取时完美工作,所以压缩或提取过程不会有问题。
  5. 即使有像start explorer.exe | cmd.exe命令 start explorer.exe | cmd.exe资源pipe理器无法正常重启,所以它绝对不是.bat文件的问题。

我可以确认它可以在Windows XP和Windows 7 x86上运行,但不能在Windows 7 x64上运行(这是我的系统)。

状态

此刻,我怀疑WinRAR,因为我已经certificate代码本身的作品。 所以,我正在用不同版本的WinRAR创build自执行的SFX。 到目前为止,我已经尝试过版本:

  • 4.11 x86
  • 4.11 x64
  • 4.20b3 x86
  • 4.20b3 x64

每次都有相同的结果。

我昨天向dev@rarlab.com提交了一个错误报告,今天上午得到了Eugene Roshal本人的回复

你好,SFX模块使用ShellExecuteEx来启动一个安装程序。 通常它运作良好。 我不知道为什么浏览器决定切换到窗口模式。 现在我build立了一个小型的独立程序

 #include <windows.h> void main() { SHELLEXECUTEINFO si; memset(&si,0,sizeof(si)); si.cbSize=sizeof(si); si.lpFile="test.bat"; si.nShow=SW_SHOWNORMAL; ShellExecuteEx(&si); } 

运行test.bat,内容和你的例子一样。 该程序显示与WinRAR SFX完全相同的行为,因此Explorer在窗口中启动。

还有今天早上的第二封电子邮件

对不起,现在没有build议。 我用CreateProcessreplace了ShellExecuteEx

 #include <windows.h> void main() { STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si,0,sizeof(si)); si.cb=sizeof(si); CreateProcess(NULL,"test.bat",NULL,NULL,TRUE,0,NULL,NULL,&si,&pi); } 

但结果是一样的。 我试图使用其他SW_标志像SW_SHOWDEFAULT或SW_RESTORE与ShellExecuteEx也作为“打开”和“探索”lpVerb,但它没有帮助。 现在我不明白这个窗口与桌面模式背后的逻辑。

我意识到前景是严峻的,但我希望对某人有所帮助。

证据/证据

链接到SFX存档展示这个,如果有人想要它: https : //dl.dropbox.com/u/27573003/Social%20Distribution/restart-explorer.exe

图片1

图片2

您可能会注意到,我正在虚拟机中运行命令(如VMwareTray.exe ),但这不是虚拟机引起的冲突。 我testing了我自己的主机系统(这是相同的操作系统)完全相同的文件,并有相同的结果。

更新

当在一个完全不同的项目中使用REG ADD时,我遇到类似的“在SFX档案之外的作品,但不是从一个”的问题。 我只是不认为SFX档案与batch file打好。

我认为user1631170是在做一些事情,“我怀疑Win-RAR的某些部分是以32位模式运行的吗?你甚至可以从32位进程启动explorer64吗?我确定Windows不会那么做“。

当我从ProcessHacker(32位进程管理器)启动explorer.exe时,我得到一个资源管理器窗口。

但我可以强迫它启动64位的资源管理器:

 %systemroot%\sysnative\cmd.exe /c start /B explorer.exe 

sysnative是Windows能够绕过32位/ 64位文件系统重定向的关键字( http://msdn.microsoft.com/zh-cn/library/windows/desktop/aa384187(v=vs.85&#xFF09; .aspx享受!

这适用于Windows 7:

 taskkill /f /IM explorer.exe start explorer.exe exit 

我有这个相同的问题,发现这里的所有解决方案仍然不能从批处理脚本工作。

这些都没有完全工作:

 start explorer.exe start explorer explorer.exe explorer 

因为他们都打开了一个窗口(并没有再次显示任务栏),或批处理脚本然后挂起,不能再执行任何命令

我发现批处理文件中的这一行确实有效(杀死explorer.exe后):

 start "" "C:\Windows\explorer.exe" 

并且还允许在脚本中执行其他命令

重新启动explorer.exe,这为我工作。

 powershell.exe Stop-Process -processname explorer 

尝试

 %windir%\explorer.exe start %windir%\explorer.exe start /d%windir% explorer.exe 

在C#中执行此操作之前,我看到过类似的问题。 该进程必须通过调用浏览器的外壳而不是浏览器窗口来调用,但我没有任何批处理问题。

尝试使用这个:

 taskkill /im explorer.exe /f explorer 

其他答案之间的区别是explorer而不是explorer.exe这已经造成了我以前的问题。

这适用于我的Win7 x64电脑。

希望这可以帮助!

有一天,我正在浏览一些WinRAR的更高级的选项,并遇到了这个标签:

在这里输入图像说明

一旦我看到我怀疑它是问题和解决方案的一部分,因为这个问题只发生在Windows 7 x64上。

如怀疑,使用Default64.SFX模块而不是默认的Default.SFX模块完全解决了问题。 最后。

与Visual Studio有同样的问题。

什么适合我(Win 7 Pro 64bit):

项目名称上的PPM选择“属性”

配置属性>生成事件>预生成事件

taskkill /im explorer.exe /f

配置属性>生成事件>生成后事件

start "" "C:\Windows\explorer.exe"

但是这会导致其他问题(IDE运行后IDE被冻结),现在我只能重启IDE再次运行build命令。

在x64或x86中使用此(具有管理权限的.bat)

 tasklist /fi "imagename eq explorer*" | find /i "explorer*" if not errorlevel 1 (taskkill /f /im "explorer*") else ( start %windir%\explorer.exe 

在Windows 7 64位中对我有效的是“C:\ Windows \ expstart.exe”或只是expstart.exe

尝试将一个explorer.exe键添加到注册表中的应用程序路径。

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths \ explorer.exe

(默认)C:\ Windows \ explorer.exe

路径C:\ Windows

或将以下内容复制到记事本并将其保存为.reg文件,然后运行它:


Windows注册表编辑器版本5.00

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths \ explorer.exe] @ =“C:\ Windows \ explorer.exe”“Path”=“C:\ Windows”

简单的上下文菜单

只需右键单击桌面上,然后选择重新启动Windows资源管理器 。 请享用!

配置的屏幕截图