如何使用C#代码从终端(Windows-CE 5.0)终止进程Windows \ MyProcc.exe?
答案 0 :(得分:4)
首先通过提供正在运行的exe的名称来查找进程并将其终止。使用System.Diagnostics名称空间。
Process[] Prs = Process.GetProcessesById(RunninExe);
if (Prs.Length > 0)
{
foreach (Process Prss in Prs)
{
Prss.Kill();
}
}
答案 1 :(得分:4)
答案是您必须使用toolhelp API。 There's a full example on MSDN包括枚举进程并终止所选进程。
答案 2 :(得分:3)
代码项目完全符合您的要求。 我发现这个课在CE中的杀戮过程中非常有用。
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();
}
答案 3 :(得分:1)
找到您的流程后,您可以拨打Kill
命令。
它位于System.Diagnostics
并且在.NET Compact Framework中也受支持,请参见此处:
不幸的是,看起来Process.GetProcess在.NET CF中不起作用,所以你应该在杀死之前使用另一种方法来查找你的进程,还有关于此的文章:
Compact Framework Process class that supports fully specified file paths
答案 4 :(得分:0)
虽然Compact Framework没有为您提供列出所有流程的本地方式,但仍然可以轻松管理您创建的流程。
当你使用 Process.Start(名称,参数)时,你只能得到一个布尔值。 这是因为该函数是一个共享函数,只是在创建一个进程时使用,后来不关心它。它只是说它是否创造了它。
您真正想要的是在启动可执行文件时获取流程描述符的副本,这意味着您需要创建流程的新实例然后使用该实例中的方法启动可执行文件。
因此,创建 Process 的新实例 - 将其命名为 P 。现在这实际上是一个流程描述符 - 但它还没有连接到流程。
您会发现 P 会公开更多属性。
设置您的可执行文件名和参数(如果有的话) P.StartInfo.FileName 和 P.StartInfo.Arguments 现在打电话 P.Start()
如果它返回True,则会将进程ID放在 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和Descriptor。
如果“Windows \ MyProcc.exe”真的是“Windows \ Someone-elses-Procc.exe”那么它就不那么容易了,因为你需要知道Id,除非是你的,否则没有简单的方法来获取它。
希望这有帮助。