如果我像这样终止 explorer.exe:
private static void KillExplorer()
{
var processes = Process.GetProcessesByName("explorer");
Console.Write("Killing Explorer... ");
foreach (var process in processes)
{
process.Kill();
process.WaitForExit();
}
Console.WriteLine("Done");
}
它会立即重新启动。
但是如果我使用taskkill /F /IM explorer.exe
,或者从任务管理器中将其终止,它就不会重新启动。
这是为什么?有什么区别?如何才能在不重新启动 explorer.exe 的情况下从代码中关闭它?当然,我可以从代码中调用 taskkill,但我希望有一个更干净的解决方案……
答案1
我不能说我没有作弊来得到答案。所有荣誉都归功于 Morguth 的帖子这里。
他建议(并已证明在我的 Win7 和 XPMode 上有效)有一个注册表项可以强制 shell 自动重新启动。使用以下代码可以禁用该功能。
RegistryKey ourKey = Registry.LocalMachine;
ourKey = ourKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);
ourKey.SetValue("AutoRestartShell", 0);
// Kill the explorer by the way you've post and do your other work
ourKey.SetValue("AutoRestartShell", 1)
答案2
不要使用 Process.Kill,尝试以下方法:
Process.Start(@"C:\Windows\System32\taskkill.exe", @"/F /IM explorer.exe");