当您在taskmgr中选择explorer进程时,按钮将是“重新启动”而不是“结束任务/结束进程”。点击重启后,explorer又像以前一样显示在taskmgr的“windows进程”中,但“kill&start”不会。那我有几个问题:
我当前的终止和启动资源管理器代码(C#)
foreach (Process p in Process.GetProcesses())
{
if (p.ProcessName.ToUpper().Contains("EXPLORER"))
{
p.Kill();
p.WaitForExit();
}
}
Process.Start("explorer.exe");
我尝试使用cmd
taskkill /f /im explorer.exe
explorer
我调试了
taskmgr
,发现虽然explorer
确实得到了特殊处理(taskmgr!WdcApplicationsMonitor::_HandleRestartExplorer
),但它只是简单地调用TerminateProcess
。
然后,它会检查注册表中的 AutoRestartShell(我使用的是 Windows 11,默认设置);
如果设置则
taskmgr
完成;操作系统将重新启动 explorer
。
如果没有设置,那么它会调用
WdcRunTaskAsInteractiveUser("L%windir%\\explorer.exe", nullptr, 9)
(wdc.dll
中未记录的api,并且9
的含义未知;看起来像是一个位标志,需要进一步挖掘)来重新启动explorer
。
注意:不知何故,使用
taskkill /f /im explorer.exe
,即使设置了 explorer
,AutoRestartShell
也不会重新启动。