Por que o Explorer reinicia automaticamente quando eu mato com Process.Kill?

1

Se eu matar o explorer.exe assim:

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");
}

Ele reinicia imediatamente.

Mas, se eu usar taskkill /F /IM explorer.exe ou eliminá-lo do gerenciador de tarefas, ele não será reiniciado.

Por que isso? Qual é a diferença? Como posso fechar o explorer.exe do código sem reiniciá-lo? Claro, eu poderia chamar taskkill do meu código, mas eu estava esperando por uma solução mais limpa ...

    
por Thomas Levesque 27.11.2012 / 12:13

1 resposta

4

Não posso dizer que não tenha trapaceado para obter a resposta. Todos os créditos vão para morguth para o seu post aqui .

O que ele sugeriu (e provou funcionar no meu Win7 e XPMode) é que existe uma chave de registro que força o shell a reiniciar automaticamente. Ao usar o seguinte código, você desativa isso.

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)
    
por 27.11.2012 / 15:55