如何杀死Windows CE中的进程?

我怎样才能杀死从我的terminal(Windows CE 5.0)使用C#代码进程Windows \ MyProcc.exe?

首先通过给出正在运行的exe的名字找到进程,并杀死它。 使用System.Diagnostics名称空间。

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

答案是你必须使用toolhelp API。 MSDN上有一个完整的例子 ,包括枚举进程和查杀选定的进程。

一个代码项目完全是你在找什么。 我发现这个类在CE的Killing过程中非常有用。

http://www.codeproject.com/Articles/36841/Compact-Framework-Process-class-that-supports-full

  ProcessInfo[] list = ProcessCE.GetProcesses(); foreach (ProcessInfo pinfo in list) { if (pinfo.FullPath.EndsWith("MyExe.exe")) pinfo.Kill(); } 

一旦你找到你的过程,你可以调用Kill命令。

它在System.Diagnostics并在.NET Compact Framework中受支持,请参阅:

Process.Kill方法

不幸的是,它看起来像Process.GetProcess不能在.NET CF中工作,所以你应该使用另一种方式来找到你的过程之前,杀死它,还有文章:

Compact Framework Process类,支持完全指定的文件路径

虽然精简版框架并没有给你一个本地的方式来列出所有的进程,但是管理你创建的进程仍然很容易。

当你使用Process.Start(name,arguments)时,你只能得到一个布尔值。 这是因为该函数是一个共享函数,只是在创建一个进程时才使用,而后者不关心它。 它只是说它是否创造了它。

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

所以,创建一个Process的新实例 – 称之为P。 这实际上是一个进程描述符 – 但它还没有连接到一个进程。

你会发现P暴露更多的属性。

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

如果返回True,则会将流程标识放在P.Id中 ,并为您的流程维护一个实时链接。

P.Responding P.HasExitedP.ExitCode中的值告诉你它是否仍在运行,如果没有,它是如何结束的,你可以使用无参数函数P.Kill()来结束它,当你厌倦因为这会结束与描述符关联的过程。

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

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

这应该以任何语言工作。

进程结构还包含一些名为MainWindowHandle的东西,它看起来像是创建任务的句柄。 我从来没有检查过,看它是否匹配,但它确实填充。

所以,如果你想杀死“Windows \ MyProcc.exe”,这很容易,只要它真的是“你的过程”,因为你可以创建一个让你回到它的Id和描述符的方式。

如果“Windows \ MyProcc.exe”确实是“Windows \ Someone-elses-Procc.exe”,那么它不是那么容易,因为你需要知道这个ID,没有简单的方法来获得它,除非它是你的。

希望这可以帮助。