问题
在批处理文件的一部分(种类,请参阅附加信息)中,我需要重新启动
资源管理器,因此我使用了经过实践检验的方法
taskkill /f /im explorer.exe >nul
explorer.exe
然后发生这种情况
explorer.exe
已成功终止explorer.exe
已启动(参见图2),但仅将打开“资源管理器”窗口,我将无限期地看到它(请参见图1)
然后,我只能通过从任务启动新任务来正确地重新启动资源管理器
经理,我假设
Win + R
是资源管理器的一部分。额外信息
现在,我从自动执行的SFX运行批处理文件时说“有点”
存档,使用WinRAR创建。因此,执行后,存档的内容为
提取为
%temp%
和用户定义的文件(通常是 bootstrap ,在这种情况下,我的批处理文件)将在成功提取后运行。
到目前为止,我已经推断出
explorer.exe
肯定已被完全杀死。 脚本中的其他所有内容均按设计工作,除了
开始
explorer.exe
试图推迟。
压缩或提取过程没有问题。
start explorer.exe | cmd.exe
Explorer之类的命令也不会正确重新启动,因此
.bat
文件绝对不是问题。 我可以确认它适用于Windows XP和Windows 7 x86,但不适用于Windows 7
x64(这是我的系统)。
状态
目前,我对WinRAR表示怀疑,因为我已经证明了代码本身
作品。因此,我正在使用不同版本的SFX创建自执行的SFX
WinRAR。到目前为止,我已经尝试了以下版本:
并且每次都有相同的结果。
我昨天向[email protected]提交了错误报告,得到了回复
尤金·罗沙尔(Eugene Roshal)本人今天早晨
#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);
}
还有今天早上的第二封电子邮件
#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);
}
我意识到前景严峻,但我希望这对某人有所帮助。
证明/证据
链接到演示此文件的SFX存档(如果有人需要):
https://dl.dropbox.com/u/27573003/Social%20Distribution/restart-explorer.exe
您可能会在这里注意到,我在VM内运行命令(如
VMwareTray.exe
),但这不是VM引起的冲突。我已经测试了完全一样我自己的主机系统(是相同的操作系统)上的文件,并且具有相同的
结果。
更新
我遇到了类似的“SFX存档之外的作品,但并非来自某人”
在完全不同的项目中使用
REG ADD
时出现问题。我只是认为SFX存档不能与批处理文件配合使用。
最佳答案
我认为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/en-us/library/windows/desktop/aa384187(v=vs.85).aspx
享受!
关于windows - 重新启动explorer.exe仅会打开一个浏览器窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10954041/