【问题标题】:Kill or terminate running process杀死或终止正在运行的进程
【发布时间】:2015-08-14 02:32:12
【问题描述】:

我在我的 C# 代码中使用外部 exe 文件。 请检查下面的代码。 这段代码我随便找了个网站。

string str = @"C:\joseph_Test\external_vendor.exe";

Process myprocess = new Process();
myprocess.StartInfo.FileName = str;
myprocess.Start();

我检查了这段代码是否正常工作,没有问题,但是下一次测试我需要使用另一种不同类型的外部 exe 文件。 而且我知道以前的“myprocess”仍然存在。 即使我重新启动程序,我的进程仍然存在。 所以我在网上搜索如何杀死或终止现有进程。 奇怪的是 myprocess 从未终止。

首先,我尝试了下面的代码,但该过程仍然存在。

myprocess.WaitForExit();
myprocess.Close();

我使用了下面的链接,但它仍然没有被杀死。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/50ecbcf2-d2d3-4f21-9775-5b8be1bd4346/how-to-terminate-a-process-in-c?forum=csharpgeneral

也没有以下面的方式终止。

Kill some processes by .exe file name

我怀疑这个 exe 文件是由供应商制作的,所以发生了这种情况。 但理论上是 C# 创建进程实例,所以我相信 C# 可以终止或杀死这个进程。

【问题讨论】:

  • 如果您正在创建进程,您可以将其分配给Job 对象,然后结束作业。如果您的进程崩溃或关闭,该作业还将导致进程自动终止。
  • 如果你链接的kill process 不能阻止你的进程(也可能你不能用任务管理器杀死它)这意味着你需要弄清楚会发生什么(你会可能需要找有 Win32 原生调试经验的人来追踪)。根据您提供的大量信息,您发现应该是答案(我不确定还有哪些额外信息可以使这篇文章不重复)。
  • 我认为 Alexei 的评论是正确的。我需要为此进行 Win32 本机调试。另一个答案也无法终止该过程。不管怎么说,还是要谢谢你。 ~~~

标签: c# process exe terminate kill-process


【解决方案1】:

使用您创建的流程:

Process myprocess = new Process();
myprocess.StartInfo.FileName = @"C:\joseph_Test\external_vendor.exe";
myprocess.Start();

在按名称终止进程的调用中,您可以首先确保它不会被硬编码,而是使用:

foreach (var process in Process.GetProcessesByName(myprocess.ProcessName))
{
    process.Kill();
}

您还可以在应用程序关闭后触发的事件中使用您的进程引用,以解决应用程序退出后它仍在运行的问题。

【讨论】:

    最近更新 更多