Почему проводник перезапускается автоматически, когда я уничтожаю его с помощью Process.Kill?
Если я убью 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 из своего кода, но я надеялся на более чистое решение...
2 ответа
Решение
Я не могу сказать, что я не обманул, чтобы получить ответ. Все кредиты идут к Моргуту за его пост здесь.
Он предложил (и доказал свою работу на моих Win7 и XPMode), что есть раздел реестра, который заставляет оболочку автоматически перезагружаться. Используя следующий код, вы отключите это.
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)
вместо использования Process.Kill попробуйте следующее:
Process.Start(@"C:\Windows\System32\taskkill.exe", @"/F /IM explorer.exe");