簡體   English   中英

C#如何關閉所有子進程

[英]How to close all child processes in 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 並使用/T參數作為外部進程啟動TASKKILL以殺死整個父進程樹和子進程樹:

例子:

TASKKILL /PID 1230 /T

MSDN Taskkill


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); 在需要的地方終止當前進程及其子進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM