如何杀死由cmd.exe启动的进程

发布于 2025-01-06 13:43:15 字数 203 浏览 0 评论 0原文

我正在尝试停止由 C# 中的 cmd.exe 启动的进程。例如启动记事本: cmd.exe /c 记事本。

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

当我终止进程时,cmd.exe 停止。但记事本仍然存在。我怎样才能获得记事本的句柄并停止它?

I'm trying to stop a process started by cmd.exe in c#. For example start notepad with; cmd.exe /c notepad.

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

When i kill the process the cmd.exe stops. But notepad remains. How can i get a handle for notepad and stop it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

﹂绝世的画 2025-01-13 13:43:15

您应该使用自定义方法列出以 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.
                }
            }
            }

You should use a custom method to list all process that have cmd as parent process

You need to add System.Management reference first.

Then simply kill the process tree:

            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.
                }
            }
            }
假面具 2025-01-13 13:43:15

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

Have you considered starting notepad.exe directly rather than using cmd.exe ?

星光不落少年眉 2025-01-13 13:43:15

那么从命令行你可以使用

taskkill /MI cmd.exe /T

Well from command line you can use

taskkill /MI cmd.exe /T

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文