Почему проводник перезагружается автоматически, когда я убиваю его с процессом.Убить?

Если я убью проводника.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 из своего кода, но я надеялся на более чистое решение...

21
задан Thomas Levesque
27.04.2023 16:15 Количество просмотров материала 2961
Распечатать страницу

1 ответ

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

то, что он предложил (и доказал работу над моими 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)
4
отвечен t3hn00b 2023-04-29 00:03

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх