如何在Windows CE中结束进程?

4

如何使用C#代码从我的终端(Windows-CE 5.0)结束Windows\MyProcc.exe进程?

5个回答

4

首先,通过给出运行exe的名称找到进程并将其终止。使用System.Diagnostics命名空间。

Process[] Prs = Process.GetProcessesById(RunninExe);
if (Prs.Length > 0)
{
      foreach (Process Prss in Prs)
      {
          Prss.Kill();
      }
}

谢谢帮助,但在Windows CE中没有Process.GetProcessesByName。 - Gali
然后 @Gali 为此目的使用 GetProcessById。 - Sai Kalyan Kumar Akshinthala

4
答案是您需要使用toolhelp APIs。 MSDN上有一个完整的示例,包括枚举进程和杀死所选进程。在此查看示例。

3

1

一旦您找到了要处理的进程,就可以调用 Kill 命令。

它在 System.Diagnostics 中,也支持 .NET Compact Framework,在这里查看:

Process.Kill 方法

不幸的是,似乎 Process.GetProcess 在 .NET CF 中无法工作,因此您应该在终止进程之前使用其他方法来查找您的进程,这方面还有一些文章:

支持完全指定文件路径的紧凑型框架进程类


0

虽然紧凑框架不提供本地列出所有进程的方法,但仍然很容易管理您创建的进程。

当您使用Process.Start(name,arguments)时,您只会得到一个布尔值。这是因为该函数是一个共享函数,只适用于创建进程并随后不关心它的情况。它只是说明它是否已创建。

您真正想要的是在启动可执行文件时获得进程描述符的副本,这意味着您需要创建Process的新实例,然后使用该实例中的方法来启动您的可执行文件。

因此,创建Process的新实例-称其为P。现在,这实际上是一个进程描述符-但尚未连接到进程。

您会发现P公开了许多其他属性。

P.StartInfo.FileNameP.StartInfo.Arguments中设置您的可执行文件名称和参数(如果有),现在调用P.Start()

如果返回True,则将进程ID放入P.Id中,并维护与您的进程的实时链接。

P.RespondingP.HasExitedP.ExitCode中的值告诉您它是否仍在运行,如果不是,则告诉您它如何结束,并且当您对其感到厌烦时,可以使用无参数函数P.Kill()来结束它,因为这会结束与描述符关联的进程。

只需为要管理的每个进程创建Process的新实例,通过实例化变量而不是通用共享函数Process.Start()启动它,并将其保留为与进程的链接。

如果您只保留P.Id的值,则仍然可以使用共享函数Process.Kill(Id)终止它,并且可以使用Process.GetProcessById()获取引用到指向它的描述符实例。

这应该适用于任何语言。

Process结构还包含称为MainWindowHandle的东西,它看起来像是创建任务的句柄。我从未检查过它是否匹配,但它确实被填充。

所以,如果你想杀死 "Windows\MyProcc.exe" 这个进程,只要它确实是 "你的进程",那么这很容易,因为你可以创建一个方式来获取它的 Id 和描述符。

如果 "Windows\MyProcc.exe" 实际上是 "Windows\别人的Procc.exe",那么就不那么容易了,因为你需要知道它的 Id,而且没有简单的方法可以获取它,除非它是你自己的。

希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接