问题
在批处理文件的一部分(有点,请参阅额外信息)我需要重新启动 资源管理器,所以我使用了经过实践检验的
方法taskkill /f /im explorer.exe >nul
explorer.exe
然后发生这种情况
explorer.exe
已成功终止explorer.exe
已启动(参见图2),但只有一个
资源管理器窗口打开,我将无限期地留下(见图1)然后,我只能通过从Task启动新任务来正确重启资源管理器
经理,我假设,Win + R
是资源管理器的一部分。
额外信息
现在,我说“有点”,因为我正在从自动执行的SFX运行批处理文件
存档,使用WinRAR创建。因此,执行时,存档的内容是
提取到%temp%
和一个用户定义的文件(通常是一个boot-strapper,in
这种情况下,我的批处理文件)在成功提取后运行。
到目前为止,我推断了
explorer.exe
肯定被完全杀死了。explorer.exe
start explorer.exe | cmd.exe
等命令,资源管理器也不会
正确重启,所以.bat
文件肯定不是问题。我可以确认它适用于Windows XP和Windows 7 x86,但不适用于Windows 7 x64(这是我的系统)。
状态
目前,我对WinRAR持怀疑态度,因为我已经证明了代码本身 作品。所以,我正在创建具有不同版本的自执行SFX WinRAR的。到目前为止,我已尝试过版本:
并且每次都有相同的结果。
我昨天向dev@rarlab.com提交了一份错误报告,得到了回复 Eugene Roshal本人今天早上
您好, SFX模块使用ShellExecuteEx启动安装应用程序。 通常它运作良好。我不知道为什么Explorer决定切换 到窗口模式。 现在我构建了一个小型独立程序
#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完全相同的行为,因此启动资源管理器 在窗口。
今天早上第二封电子邮件
抱歉,现在没有建议。我用CreateProcess替换了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_标志 带有ShellExecuteEx的SW_SHOWDEFAULT或SW_RESTORE也是“打开” 和“探索”lpVerb,但它没有帮助。现在我没有 了解这种窗口模式与桌面模式背后的逻辑。
我意识到前景是严峻的,但我希望对某人有所帮助..
证据/证据
链接到SFX档案,证明这一点,如果有人想要它: https://dl.dropbox.com/u/27573003/Social%20Distribution/restart-explorer.exe
您可能会注意到我在VM中运行命令(如表示的那样)
VMwareTray.exe
)但它不是由虚拟机引起的冲突。我测试的完全相同
我自己的主机系统上的文件(操作系统是相同的)并且具有相同的文件
结果
更新
我正在体验类似的“SFX档案之外的作品,但不是来自一个”
在完全不同的项目中使用REG ADD
时出现问题。
我只是觉得SFX档案与批处理文件不相称。
答案 0 :(得分:14)
我认为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 享受!
答案 1 :(得分:8)
我遇到了同样的问题,发现这里的所有解决方案仍无法使用批处理脚本。
这些都没有完全奏效:
start explorer.exe
start explorer
explorer.exe
explorer
因为它们都打开了一个窗口(并且没有再次显示任务栏),或者之后挂起的批处理脚本无法再执行任何命令
我发现批处理文件中的这一行确实有效(在杀死explorer.exe之后):
start "" "%windir%\explorer.exe"
并且还允许在脚本
之后执行其他命令答案 2 :(得分:6)
这适用于Windows 7:
taskkill /f /IM explorer.exe
start explorer.exe
exit
答案 3 :(得分:2)
要重新启动explorer.exe,这对我有用。
powershell.exe Stop-Process -processname explorer
答案 4 :(得分:1)
尝试
%windir%\explorer.exe
start %windir%\explorer.exe
start /d%windir% explorer.exe
答案 5 :(得分:1)
当您在64位窗口中从32位应用程序运行explorer.exe时,路径将被重定向到包含32位explorer.exe的SysWOW64目录。
在XP64中,这没什么大不了的。在任务管理器中,您可以看到32位的explorer.exe正在运行,但确实作为外壳启动。在Windows 10中(就我所遇到的问题而言,它似乎是Windows 7中引入的),32位explorer.exe是一个存根,它创建了64位explorer.exe的新实例。它可能会在此处通过命令行传递路径,因此64位的explorer.exe会打开一个窗口,而不是启动外壳程序。
因此,仍然像以前一样,可以通过使用带有或不带有路径作为命令行参数的启动explorer.exe来控制是否启动窗口或外壳。
相反,您应该从32位应用程序强制启动64位explorer.exe,一切正常。为此,一种方法是使用上面提到的sysnative目录。但是另一种方法是使用Wow64DisableWow64FsRedirection / Wow64RevertWow64FsRedirection。
我做了后者,并且可以确认它很好地工作。对于CreateProcess和ShellExecuteEx API。
答案 6 :(得分:0)
在C#中执行此操作之前,我遇到过类似的问题。必须通过调用explorer shell而不是explorer窗口来调用该过程,但我没有批处理中的任何问题。
尝试使用:
taskkill /im explorer.exe /f
explorer
其他答案之间的区别是explorer
而不是explorer.exe
,这对我来说是个问题。
这适用于我的Win7 x64 PC。
希望这有帮助!
答案 7 :(得分:0)
前几天,我正在浏览一些WinRAR更高级的选项,并看到了这个标签:
当我看到我怀疑它是问题和解决方案的一部分时,因为此问题只发生在Windows 7 x64上。
正如所怀疑的那样,使用Default64.SFX
模块而不是默认的Default.SFX
模块完全解决了这个问题。最后。
答案 8 :(得分:0)
与Visual Studio有同样的问题。
什么对我有用(Win 7 Pro 64bit):
项目名称上的PPM选择“属性”
配置属性&gt;构建活动&gt;预建活动
taskkill /im explorer.exe /f
配置属性&gt;构建活动&gt;建设后活动
start "" "C:\Windows\explorer.exe"
但这会产生其他问题(IDE在资源管理器运行后被冻结)现在我只能重新启动IDE以再次运行构建命令...
答案 9 :(得分:0)
在x64或x86中使用此(带有管理权限的.bat)
tasklist /fi "imagename eq explorer*" | find /i "explorer*"
if not errorlevel 1 (taskkill /f /im "explorer*") else (
start %windir%\explorer.exe
答案 10 :(得分:0)
在Windows 7 64位中对我有用的是 “C:\ WINDOWS \ expstart.exe” 要不就 expstart.exe
答案 11 :(得分:0)
尝试将explorer.exe密钥添加到注册表中的App Paths。
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的” “路径”= “C:\ Windows的”
答案 12 :(得分:0)
要查看启动面板,您需要从 system32 文件夹中执行explorer.exe
taskkill /im explorer.exe /f
cd %WINDIR%\system32
start %WINDIR%\explorer.exe
答案 13 :(得分:-5)