5

奇怪,但也许我处理它的方式不正确 - 我需要非常简单地检查 explorer.exe 是否正在运行,如果是,则将其杀死。但是,按照我目前实现这一点的方式,explorer.exe 在我杀死它后会重新启动。

通过批处理的正常 taskkill 工作正常,C# 有什么不同吗?

private void Form1_Load(object sender, EventArgs e)
{
    Process[] prcChecker = Process.GetProcessesByName("explorer");
    if (prcChecker.Length > 0)
    {
        MessageBox.Show("Explorer running");
        foreach (Process p in prcChecker)
        {
            p.Kill();
        }
    }
    else
    {
        MessageBox.Show("Explorer is not running");
    }
}
4

3 回答 3

2

虽然不是 C# 方式,但您也可以尝试将注册表项设置HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoRestartShell为 0 以停止自动重启。

编辑:-

在 C# 中试试这个:-

RegistryKey ourKey = Registry.LocalMachine;
ourKey = ourKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);
ourKey.SetValue("AutoRestartShell", 0);
于 2013-09-14T18:04:02.327 回答
2

那是因为explorer.exe如果 Windows 碰巧死了,它会负责重新启动。

可以延迟这种行为(例如,tortoisegit 的设置就是这样做的),但不建议这样做 - 用户会很生气。

于 2013-09-14T18:01:58.943 回答
0

尝试使用退出代码终止进程1

抱歉,我没有任何示例代码,因为我不是 C# 程序员,但在我的应用程序中它工作得很好。

我使用了 C++ 函数:

终止进程

于 2020-10-13T13:25:04.207 回答