我試圖停止由c#中的cmd.exe啓動的進程。例如,開始記事本; cmd.exe/c記事本。如何殺死由cmd.exe啓動的進程
System.Diagnostics.ProcessStartInfo("cmd.exe", "/c notepad");
當我殺死進程cmd.exe停止。但記事本仍然存在。我如何獲得記事本的句柄並停止它?
我試圖停止由c#中的cmd.exe啓動的進程。例如,開始記事本; cmd.exe/c記事本。如何殺死由cmd.exe啓動的進程
System.Diagnostics.ProcessStartInfo("cmd.exe", "/c notepad");
當我殺死進程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.
}
}
}
那麼從命令行您可以使用
的taskkill/MI的cmd.exe/T
你需要殺死'notepad.exe'過程中從'cmd.exe'過程分開。如果您手動執行此操作,您將看到相同的行爲。 – 2012-02-16 22:07:17