65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.90/5 (16投票s)

2009年5月30日

CPOL

2分钟阅读

viewsIcon

96413

downloadIcon

4878

使用完整的文件路径终止进程,或检查进程是否正在运行。它还可以枚举进程,返回正在运行的 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 日 - 提交文章。
© . All rights reserved.