Script for checking if a process is already running

From WPKG | Open Source Software Deployment and Distribution
Jump to: navigation, search

Sometimes, you don't want to make an upgrade or installation if a user has already started a given process, because:

A workaround is to check if a given process is not running already. Windows XP has a "tasklist" command which can enumerate processes, but unfortunately, Windows 2000 don't.

Therefore, this script written in JScript. You can add one or more process names; it will exit with code 1 if any of these processes is running.

Example entry for packages.xml - WPKG will start upgrade of Firefox only if there is no firefox.exe process:

<upgrade cmd='cscript "%SOFTWARE%\wpkg\tools\matchprocess.js" firefox.exe' />
<upgrade cmd='"%SOFTWARE%\Internet\firefox\Firefox Setup 3.0.exe" -ms' />


The script:

// This script checks if one or more processes with a given name exist.
// If the process exists, the script exits with code 1.
// It can be used to prevent installation if a process is running and
// therefore, locks files and it's not possible or safe to upgrade it.
//
// Example usage:
// cscript matchprocess.js firefox.exe seamonkey.exe
 
if(WScript.Arguments.count()>0) {
 
        var haveMatch;
 
        for (i=0; i<WScript.Arguments.length; i++) {
 
                var curarg = WScript.Arguments(i).toLowerCase();
 
                var e = new Enumerator (GetObject("winmgmts:").InstancesOf("Win32_process"));
 
                for (; !e.atEnd(); e.moveNext()) {
                        var p = e.item ();
                        curproc = p.Name.toLowerCase();
 
                        if (curproc == curarg) {
                                WScript.Echo (p.Name + " exists");
                                var haveMatch = true;
                        }
                }
        }
 
        if (haveMatch == true) {
                WScript.Echo("Matches found");
                WScript.Quit(1);
        } else {
                WScript.Echo("No match found");
        }
 
} else {
 
        WScript.Echo ("You have to specify at least one process!");
        WScript.Quit(2);
}
Personal tools
Namespaces
Variants
Actions
Navigation
ideas?
Toolbox