我正在尝试停止c#中cmd.exe启动的进程.例如,开始记事本; cmd.exe/c记事本.
System.Diagnostics.ProcessStartInfo("cmd.exe", "/c notepad");
Run Code Online (Sandbox Code Playgroud)
当我终止进程时,cmd.exe停止.但记事本仍然存在.我如何获得记事本的手柄并停止它?
您应该使用自定义方法列出将cmd作为父进程的所有进程
您需要先添加System.Management引用.
然后简单地杀死进程树:
void Main()
{
var psi = new ProcessStartInfo("cmd.exe", "/c notepad");
var cmdProcess = Process.Start(psi);
Thread.Sleep(2000);
KillProcessAndChildren(cmdProcess.Id);
}
public void KillProcessAndChildren(int pid)
{
using (var searcher = new ManagementObjectSearcher
("Select * From Win32_Process Where ParentProcessID=" + pid))
{
var moc = searcher.Get();
foreach (ManagementObject mo in moc)
{
KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"]));
}
try
{
var proc = Process.GetProcessById(pid);
proc.Kill();
}
catch (Exception e)
{
// Process already exited.
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5117 次 |
| 最近记录: |