为什么当我使用process.Kill() c#时explorer.exe会自动重启?

本文关键字:exe explorer 重启 process Kill 为什么 | 更新日期: 2023-09-27 18:09:21

我编写了这个小函数,它按名称搜索进程并杀死它:见下面的代码

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

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

为什么当我使用process.Kill() c#时explorer.exe会自动重启?

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

设置为0将不允许重新启动explorer.exe。虽然我个人认为这不是最好的主意搅乱注册表,但如果你真的需要,使用注册表。SetValue将该值从代码(文档:https://msdn.microsoft.com/en-us/library/5a5t63w8(v=vs.110).aspx)更改为0

编辑:灵感来自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