Click here to Skip to main content
15,922,584 members
Articles / Mobile Apps / Windows Mobile

Compact Framework Process class that supports fully specified file paths

Rate me:
Please Sign up or sign in to vote.
4.90/5 (17 votes)
30 May 2009CPOL2 min read 92.4K   4.8K   26   29
Terminate a process, or check if it is running, using the full file path. It also enumerates processes returning the full path to the running EXE file.

Introduction

I needed to be able to terminate all the processes in a specific folder.

The Process class in the .NET Compact Framework is limited in its functionality. You cannot even enumerate processes. You can find code to do this on the Internet, but all the samples I found only return the name of the EXE file of a process. What I needed was the full path to the EXE file.

After some research, I found the solution. I wrapped the result into the ProcessCE class.

What can the ProcessCE class do for you?

  • Enumerate running processes;
  • Each enumerated process contains the full path to the EXE file;
  • Check in a single function call if a process is running by specifying the full path to the EXE file;
  • Kill a process in a single function call by specifying the full path to the EXE file;
  • Find the Process ID (PID) in a single function call by specifying the full path to the EXE file.

This code is based on several code snippets and examples I found on the Internet.

Using the code

The ProcessCE class is straightforward and easy to use. Download ProcessCE.zip and add the containing ProcessCE.cs file to your project. Then, add the following using statement to the source file where you want to use the class:

C#
using Terranova.API;

To enumerate running processes:

C#
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

To check if a process is running:

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

To find a Process ID (PID):

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

To terminate a process:

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

ProcessCE.FindAndKill() will return false if the EXE file was not found. If terminating the process fails, it will throw a Win32Exception.

Points of interest

This code is for use with Windows CE and Windows Mobile only. The code was tested on Windows Mobile 6.1 (Windows CE 5.2). Windows CE 4 should be no problem.

Tip: A code example to enumerate processes that can be found on several websites was crashing randomly with Win32 error 8 on several devices. This is an out of memory message. The solution is to add the TH32CS_SNAPNOHEAPS flag to the CreateToolhelp32Snapshot() call:

C#
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS | TH32CS_SNAPNOHEAPS, 0)

History

  • 30 May 2009 - Article submitted.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Netherlands Netherlands
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralMy vote of 5 Pin
mare_f20-Sep-19 21:11
mare_f20-Sep-19 21:11 
QuestionThank you Pin
steve_949661314-Feb-18 20:56
professionalsteve_949661314-Feb-18 20:56 
QuestionThank you Pin
Member 89518472-Jun-16 6:24
Member 89518472-Jun-16 6:24 
Questionuseful code Pin
Member 184667011-Oct-15 3:16
Member 184667011-Oct-15 3:16 
QuestionAwesome work! Pin
Sergio Andrés Gutiérrez Rojas24-Jun-15 5:29
Sergio Andrés Gutiérrez Rojas24-Jun-15 5:29 
GeneralGreat job! Pin
woytas9-Dec-14 4:15
woytas9-Dec-14 4:15 
QuestionProcess killed by TaskMgr but not by this code Pin
cerede200027-Nov-14 5:41
cerede200027-Nov-14 5:41 
Questionterminate VNCCE Process Pin
Member 1068188320-Mar-14 23:07
Member 1068188320-Mar-14 23:07 
QuestionVB.NET version of this code? Pin
seph0r1-Jan-14 21:39
seph0r1-Jan-14 21:39 
GeneralMy vote of 3 Pin
hjgode29-May-13 20:24
hjgode29-May-13 20:24 
BugCrashes device (WM65) in TerminateProcess Pin
hjgode29-May-13 20:23
hjgode29-May-13 20:23 
QuestionExcellent. Thanks. Pin
CathalMF13-May-13 5:22
CathalMF13-May-13 5:22 
GeneralWow! Niceeee. Clap! clap!! Pin
Roxxyy14-Jan-13 10:21
Roxxyy14-Jan-13 10:21 
QuestionMi respeto hermano!!!! Pin
gabriel loria29-Jan-12 5:23
gabriel loria29-Jan-12 5:23 
QuestionSystem.OverflowException was unhandled Pin
ninefofo16-Aug-11 9:12
ninefofo16-Aug-11 9:12 
AnswerRe: System.OverflowException was unhandled Pin
lyris16-Nov-12 4:09
lyris16-Nov-12 4:09 
GeneralRe: System.OverflowException was unhandled Pin
seph0r1-Jan-14 21:41
seph0r1-Jan-14 21:41 
SuggestionRe: System.OverflowException was unhandled Pin
Emil Steen3-Apr-18 4:06
Emil Steen3-Apr-18 4:06 
I'm getting OverflowException in Windows Mobile 6.5, when running C#.

* A simple solution is to change the struct members causing the problem from uint to int.
* A second simple solution is to add unchecked { } around the code lines the tries to cast uint to int.
* And the proper way is probably to change all the code that tries to cast uint to int, to use uint all the way.
GeneralBrilliant Pin
garyevans4-Jul-11 2:25
garyevans4-Jul-11 2:25 
GeneralPerfect job! Pin
Ralph Maas from The Netherlands27-Jan-10 23:57
Ralph Maas from The Netherlands27-Jan-10 23:57 
GeneralTrying to use this namespace in VB.net project Pin
SvenCPA27-Jan-10 5:54
SvenCPA27-Jan-10 5:54 
GeneralBrilliant! Pin
Muffadal4-Jan-10 23:56
Muffadal4-Jan-10 23:56 
GeneralRe: Brilliant! Pin
Frank Th. van de Ven5-Jan-10 2:04
Frank Th. van de Ven5-Jan-10 2:04 
GeneralThanks. finish my problem in 10 minutes Pin
Keshmahajan10-Dec-09 11:36
Keshmahajan10-Dec-09 11:36 
GeneralRe: Thanks. finish my problem in 10 minutes Pin
Frank Th. van de Ven5-Jan-10 2:06
Frank Th. van de Ven5-Jan-10 2:06 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.