如何终止cmd.exe启动的进程

syl*_*loc 2 c# process

我正在尝试停止c#中cmd.exe启动的进程.例如,开始记事本; cmd.exe/c记事本.

System.Diagnostics.ProcessStartInfo("cmd.exe", "/c notepad");
Run Code Online (Sandbox Code Playgroud)

当我终止进程时,cmd.exe停止.但记事本仍然存在.我如何获得记事本的手柄并停止它?

Mic*_*ael 9

您应该使用自定义方法列出将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.
                }
            }
            }
Run Code Online (Sandbox Code Playgroud)