为什么当我使用 Process.Kill 终止 explorer 时它会自动重新启动?

为什么当我使用 Process.Kill 终止 explorer 时它会自动重新启动?

如果我像这样终止 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"); 

相关内容