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

时间:2012-06-08 18:19:41

标签: windows batch-file explorer taskkill

问题

在批处理文件的一部分(有点,请参阅额外信息)我需要重新启动 资源管理器,所以我使用了经过实践检验的

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

然后发生这种情况

  1. explorer.exe已成功终止
  2. explorer.exe已启动(参见图2),但只有一个 资源管理器窗口打开,我将无限期地留下(见图1)
  3. 然后,我只能通过从Task启动新任务来正确重启资源管理器 经理,我假设,Win + R是资源管理器的一部分。

    额外信息

    现在,我说“有点”,因为我正在从自动执行的SFX运行批处理文件 存档,使用WinRAR创建。因此,执行时,存档的内容是 提取到%temp%和一个用户定义的文件(通常是一个boot-strapper,in 这种情况下,我的批处理文件)在成功提取后运行。

    到目前为止,我推断了

    1. explorer.exe肯定被完全杀死了。
    2. 批处理文件肯定会在运行时正确调用并执行 脚本中的其他所有内容都按设计工作,除了行 开始explorer.exe
    3. 重启资源管理器的命令不是“非常及时”,或者其他任何东西,就像我一样 试图推迟它。
    4. 批处理文件在从存档中手动提取时工作正常,因此 这不是压缩或提取过程的问题。
    5. 即使使用start explorer.exe | cmd.exe等命令,资源管理器也不会 正确重启,所以.bat文件肯定不是问题。
    6. 我可以确认它适用于Windows XP和Windows 7 x86,但不适用于Windows 7 x64(这是我的系统)。

      状态

      目前,我对WinRAR持怀疑态度,因为我已经证明了代码本身 作品。所以,我正在创建具有不同版本的自执行SFX WinRAR的。到目前为止,我已尝试过版本:

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

      并且每次都有相同的结果。

      我昨天向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

      image 1

      image 2

      您可能会注意到我在VM中运行命令(如表示的那样) VMwareTray.exe)但它不是由虚拟机引起的冲突。我测试的完全相同 我自己的主机系统上的文件(操作系统是相同的)并且具有相同的文件 结果

      更新

      我正在体验类似的“SFX档案之外的作品,但不是来自一个” 在完全不同的项目中使用REG ADD时出现问题。 我只是觉得SFX档案与批处理文件不相称。

14 个答案:

答案 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更高级的选项,并看到了这个标签:

enter image description here

当我看到我怀疑它是问题和解决方案的一部分时,因为此问题只发生在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)

Easy Context Menu

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

Screenshot of the configuration