.NET Compact Framework中的进程管理

在.NET Compact Framework中,Process 类的功能受到了限制,甚至不能枚举进程。虽然可以在互联网上找到一些代码示例来实现这一功能,但发现的大多数示例只返回进程的EXE文件名。需要的是EXE文件的完整路径。经过一番研究,找到了解决方案,并将结果封装到了ProcessCE 类中。

ProcessCE类能为做什么?

ProcessCE 类提供了以下功能:

  • 枚举正在运行的进程;
  • 每个枚举出的进程都包含EXE文件的完整路径;
  • 通过指定EXE文件的完整路径,在单个函数调用中检查进程是否正在运行;
  • 通过指定EXE文件的完整路径,在单个函数调用中终止进程;
  • 通过指定EXE文件的完整路径,在单个函数调用中找到进程ID(PID)。

这段代码基于在互联网上找到的多个代码片段和示例。使用ProcessCE 类非常简单直观。下载ProcessCE.zip 并将包含的ProcessCE.cs 文件添加到项目中。然后,在想使用该类的源文件中添加以下using 语句:

C# using Terranova.API;

要枚举正在运行的进程,请使用以下代码:

C# ProcessInfo[] list = ProcessCE.GetProcesses(); foreach (ProcessInfo item in list) { Debug.WriteLine("Process item: " + item.FullPath); if (item.FullPath == @"\Windows\iexplore.exe") item.Kill(); }

样例输出:

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

要检查进程是否正在运行,请使用以下代码:

C# bool result = ProcessCE.IsRunning(@"\Windows\iexplore.exe");

要找到进程ID(PID),请使用以下代码:

C# IntPtr pid = ProcessCE.FindProcessPID(@"\Windows\iexplore.exe"); if (pid == IntPtr.Zero) throw new Exception("Process not found.");

要终止进程,请使用以下代码:

C# 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应该也没有问题。

C# CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPNOHEAPS, 0)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485