gpt4 book ai didi

c# - 强制终止进程

转载 作者:太空狗 更新时间:2023-10-29 23:08:41 26 4
gpt4 key购买 nike

我有一个连续运行的循环,作为一个进程来检查 mstsc.exe 是否正在运行。

for (; ; )
{
System.Diagnostics.Process[] pname = System.Diagnostics.Process.GetProcessesByName("mstsc");

if (pname.Length != 0)
{

}
else
{
System.Diagnostics.Process.Start(@"mstsc.exe");
}
System.Threading.Thread.Sleep(3000);
}

问题是在注销、重启或关机时我得到了这个。

enter image description here

我试图在 Form_Closing 上或用

结束进程
Microsoft.Win32.SystemEvents.SessionEnded += 
new Microsoft.Win32.SessionEndedEventHandler(SystemEvents_SessionEnded);

我还是明白了...

我怎样才能强制这个进程正确终止?

最佳答案

当进程有子进程时会发生这种情况。你必须杀死整个进程树。

Kill process tree programmatically in C#

来自上面链接的代码(由 Gravitas 提供):

/// <summary>
/// Kill a process, and all of its children.
/// </summary>
/// <param name="pid">Process ID.</param>
private static void KillProcessAndChildren(int pid)
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Process Where ParentProcessID=" + pid);
ManagementObjectCollection moc = searcher.Get();
foreach (ManagementObject mo in moc)
{
KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"]));
}
try
{
Process proc = Process.GetProcessById(pid);
proc.Kill();
}
catch (ArgumentException)
{
// Process already exited.
}
}

关于c# - 强制终止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16305357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com