我怎样才能杀死从我的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.FileName和P.StartInfo.Arguments中设置可执行文件名称和参数(如果有的话),现在调用P.Start()
如果返回True,则会将流程标识放在P.Id中 ,并为您的流程维护一个实时链接。
P.Responding P.HasExited和P.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,没有简单的方法来获得它,除非它是你的。
希望这可以帮助。