it-swarm-ja.com

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を呼び出すことはできますが、よりクリーンなソリューションを望んでいました...

3
Thomas Levesque

私は答えを得るためにだまされていないとは言えません。すべてのクレジットは彼の投稿のためにmorguthに行きます ここ

彼が提案した(そして私の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)
5
t3hn00b