C# 如何终止由cmd.exe启动的进程
我正在尝试停止由c#中的cmd.exe启动的进程。例如,开始使用记事本;cmd.exe/c记事本C# 如何终止由cmd.exe启动的进程,c#,process,C#,Process,我正在尝试停止由c#中的cmd.exe启动的进程。例如,开始使用记事本;cmd.exe/c记事本 System.Diagnostics.ProcessStartInfo("cmd.exe", "/c notepad"); 当我终止进程时,cmd.exe停止。但记事本仍然存在。如何获取记事本的句柄并将其停止?您是否考虑过直接启动notepad.exe而不是使用cmd.exe?以及您可以使用的命令行 taskkill/MI cmd.exe/T 您应该使用自定义方法列出所有以cmd作为父进程的进程
System.Diagnostics.ProcessStartInfo("cmd.exe", "/c notepad");
当我终止进程时,cmd.exe停止。但记事本仍然存在。如何获取记事本的句柄并将其停止?您是否考虑过直接启动
notepad.exe而不是使用cmd.exe
?以及您可以使用的命令行
taskkill/MI cmd.exe/T
您应该使用自定义方法列出所有以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.
}
}
}
您需要将notepad.exe
进程与cmd.exe
进程分开终止。如果手动执行,您将看到相同的行为。我需要从命令行启动程序。记事本只是一个例子。