奇怪,但也许我正在以错误的方式处理它 - 我需要非常简单地检查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");
}
}
答案 0 :(得分:2)
这是因为如果碰到死亡,Windows会负责重新启动explorer.exe
。
可以延迟这种行为(例如,tortoisegit的设置会这样做),但不推荐 - 用户会生气。
答案 1 :(得分:1)
虽然不是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);
答案 2 :(得分:0)