为什么explorer.exe会在我用户进程时自动重启.Kill()C#?

时间:2015-08-22 16:41:09

标签: c# kill-process

我写了这个小函数,按名称搜索进程并将其杀死:请参阅下面的代码

Process[] procList = Process.GetProcesses();
RegistryKey expKey = Registry.LocalMachine;
expKey = expKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);
expKey.SetValue("AutoRestartShell", 0);

        using (StreamWriter writer = new StreamWriter(@"C:\test\progtemp\Procs1.Txt", true))

        {

            int i = 0;

            foreach (Process procs in procList)

            {

                writer.WriteLine(string.Format("Process Name {0} -- Process ID {1} -- Session ID {2}", procs.ProcessName, procs.Id, procs.SessionId));

                if (procs.ProcessName == "explorer")

                {

                    procList[i].Kill();

                }

                i++;

            }

        }
expKey.SetValue("AutoRestartShell", 1);

我很好奇为什么当我告诉它杀死资源管理器时它会自动重启。如何才能使它不重新启动,你必须进入任务管理器并手动重新启动它?

1 个答案:

答案 0 :(得分:5)

如果您运行regedit并进入HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon,您可以找到名为AutoRestartShell的密钥。

设置为0将禁止explorer.exe重新启动。虽然我个人说最好不要乱用Registry,但如果你真的需要,请利用Registry.SetValue从代码中将该值更改为0(文档:https://msdn.microsoft.com/en-us/library/5a5t63w8(v=vs.110).aspx

编辑:灵感取自https://technet.microsoft.com/en-us/library/cc939703.aspx

编辑2:向谷歌挖掘一下,得出以下结果,这解释了一切稍微好一些:https://superuser.com/questions/511914/why-does-explorer-restart-automatically-when-i-kill-it-with-process-kill