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

C# 如何终止由cmd.exe启动的进程,c#,process,C#,Process,我正在尝试停止由c#中的cmd.exe启动的进程。例如,开始使用记事本;cmd.exe/c记事本 System.Diagnostics.ProcessStartInfo("cmd.exe", "/c notepad"); 当我终止进程时,cmd.exe停止。但记事本仍然存在。如何获取记事本的句柄并将其停止?您是否考虑过直接启动notepad.exe而不是使用cmd.exe?以及您可以使用的命令行 taskkill/MI cmd.exe/T 您应该使用自定义方法列出所有以cmd作为父进程的进程

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

System.Diagnostics.ProcessStartInfo("cmd.exe", "/c notepad");

当我终止进程时,cmd.exe停止。但记事本仍然存在。如何获取记事本的句柄并将其停止?

您是否考虑过直接启动
notepad.exe而不是使用
cmd.exe

以及您可以使用的命令行

taskkill/MI cmd.exe/T


您应该使用自定义方法列出所有以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
进程分开终止。如果手动执行,您将看到相同的行为。我需要从命令行启动程序。记事本只是一个例子。