在.NET Compact Framework中,Process
类的功能受到了限制,甚至不能枚举进程。虽然可以在互联网上找到一些代码示例来实现这一功能,但发现的大多数示例只返回进程的EXE文件名。需要的是EXE文件的完整路径。经过一番研究,找到了解决方案,并将结果封装到了ProcessCE
类中。
ProcessCE
类提供了以下功能:
这段代码基于在互联网上找到的多个代码片段和示例。使用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)