支持完整指定文件路径的 Compact Framework 进程类






4.90/5 (16投票s)
使用完整的文件路径终止进程,或检查进程是否正在运行。它还可以枚举进程,返回正在运行的 EXE 文件的完整路径。
引言
我需要能够终止特定文件夹中的所有进程。
.NET Compact Framework 中的 Process
类在功能上受到限制。你甚至无法枚举进程。你可以在互联网上找到执行此操作的代码,但我找到的所有示例仅返回进程的 EXE 文件名。我需要的却是 EXE 文件的完整路径。
经过一些研究,我找到了解决方案。我将结果封装到 ProcessCE
类中。
ProcessCE
类能为你做什么?
- 枚举正在运行的进程;
- 每个枚举的进程都包含 EXE 文件的完整路径;
- 通过指定 EXE 文件的完整路径,在一个函数调用中检查进程是否正在运行;
- 通过指定 EXE 文件的完整路径,在一个函数调用中终止进程;
- 通过指定 EXE 文件的完整路径,在一个函数调用中查找进程 ID (PID)。
此代码基于我在互联网上找到的几个代码片段和示例。
使用代码
ProcessCE
类简单易用。下载 ProcessCE.zip 并将包含的 ProcessCE.cs 文件添加到你的项目中。然后,将以下 using
语句添加到要使用该类的源文件中
using Terranova.API;
枚举正在运行的进程
ProcessInfo[] list = ProcessCE.GetProcesses();
foreach (ProcessInfo item in list)
{
Debug.WriteLine("Process item: " + item.FullPath);
if (item.FullPath == @"\Windows\iexplore.exe")
item.Kill();
}
// Sample output:
// Process item: \Windows\nk.exe
// Process item: \Windows\filesys.exe
// Process item: \Windows\device.exe
// Process item: \Windows\services.exe
// Process item: \Windows\gwes.exe
// Process item: \Windows\shell32.exe
// Process item: \Windows\poutlook.exe
// Process item: \Program Files\Geso\Discovery\TerranovaWakeUpWCE.exe
检查进程是否正在运行
bool result = ProcessCE.IsRunning(@"\Windows\iexplore.exe");
查找进程 ID (PID)
IntPtr pid = ProcessCE.FindProcessPID(@"\Windows\iexplore.exe");
if (pid == IntPtr.Zero)
throw new Exception("Process not found.");
终止进程
bool result = ProcessCE.FindAndKill(@"\Windows\iexplore.exe");
如果未找到 EXE 文件,ProcessCE.FindAndKill()
将返回 false
。如果终止进程失败,它将抛出 Win32Exception
。
关注点
此代码仅供 Windows CE 和 Windows Mobile 使用。该代码在 Windows Mobile 6.1 (Windows CE 5.2) 上进行了测试。Windows CE 4 应该没有问题。
提示:在多个网站上可以找到的代码示例,用于枚举进程,在多个设备上使用 Win32 错误 8 随机崩溃。这是一个内存不足的消息。解决方案是在 CreateToolhelp32Snapshot()
调用中添加 TH32CS_SNAPNOHEAPS
标志
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPNOHEAPS, 0)
历史
- 2009 年 5 月 30 日 - 提交文章。