1

Если я убью 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 ответ1

4

Я не могу сказать, что я не обманул, чтобы получить ответ. Все кредиты идут к Моргуту за его пост здесь.

То, что он предложил (и доказал работу над моими 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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .