如何解决如何在C#中关闭所有子进程
C#代码:
ProcessStartInfo processStartInfo = new ProcessStartInfo();
processStartInfo.Verb = "runas";
processStartInfo.FileName = fileNameToExecute;
processStartInfo.Arguments = parameters;
Process process = new Process();
processStartInfo.UseShellExecute = false;
processStartInfo.CreateNoWindow = true;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardError = true;
process.StartInfo = processStartInfo;
process.Start();
process.WaitForExit();
process.Close();
我正在从C#Windows应用程序中调用java.exe。 java.exe用于测试某些网站。 Java使用Selenium通过打开默认的Web浏览器来测试网页。它将打开3到10次浏览器并测试测试用例。我想在C#应用程序中添加停止按钮,当我们单击它时,它应该关闭java.exe以及那些打开的浏览器。怎么做?
我试图通过使用这样的exe名称来获取进程名称
Process[] processName = Process.GetProcessesByName(fileName.Substring(0,fileName.LastIndexOf('.')));
但是它不起作用。
解决方法
找到您的java.exe
进程的进程ID,并以TASKKILL
作为外部进程启动/T
作为外部进程,以杀死整个父进程和子进程树:
示例:
TASKKILL /PID 1230 /T
,
Process process = new Process();
processStartInfo.UseShellExecute = false;
processStartInfo.CreateNoWindow = true;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardError = true;
process.StartInfo = processStartInfo;
process.Start();
javaExeProcessId = process.Id; //global variable
process.WaitForExit();
process.Close();
在开始新进程之前,我已将processId存储在全局变量中。
private static void KillProcessAndChildren(int pid)
{
// Cannot close 'system idle process'.
if (pid == 0)
{
return;
}
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 (Exception ex)
{
// Process already exited.
}
}
我叫KillProcessAndChildren(javaExeProcessId);在需要时杀死当前进程及其子进程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。