Почему проводник перезапускается автоматически, когда я уничтожаю его с помощью 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"); 
Другие вопросы по тегам