簡體   English   中英

如何終止cmd.exe啟動的進程

[英]How to kill a process started by cmd.exe

我正在嘗試停止c#中cmd.exe啟動的進程。 例如,開始記事本; cmd.exe / c記事本。

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.
                }
            }
            }

您是否考慮過直接啟動notepad.exe而不是使用cmd.exe

從命令行你可以使用

taskkill / MI cmd.exe / T.

暫無
暫無

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

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