NsProcess plugin

From NSIS Wiki
Jump to navigationJump to search
Author: Instructor (talk, contrib)


Links

Download v1.5:

Download v1.6 (NSIS UNICODE support, by brainsucker, rename nsProcessW.dll):

Discussion:
Forum thread

Description

Features:

  • Find a process by name
  • Kill all processes with specified name (not only one)
  • Close all processes with specified name (first tries to close all process windows, waits for 3 seconds for process to exit, terminates if still alive, use _CloseProcess function)
  • The process name is case-insensitive
  • Win95/98/ME/NT/2000/XP/Win7 support
  • Finds processes of other user(s) when running 'as Administrator' or when having switched to another user
  • Small plugin size (4 Kb)
  • NSIS UNICODE support (just rename nsProcessW.dll into nsProcess.dll)

Example Usage

  !include "LogicLib.nsh"
 
  Section ""
    StrCpy $1 "YOURAPP.exe"
 
    nsProcess::_FindProcess "$1"
    Pop $R0
    ${If} $R0 = 0
      nsProcess::_KillProcess "$1"
      Pop $R0
 
      Sleep 500
    ${EndIf}
 
  SectionEnd

Commonly _FindProcess returns:

  • 0 if found
  • 603 if no process matched
 // Return codes are as follows:
 //   0   = Success
 //   601 = No permission to terminate process
 //   602 = Not all processes terminated successfully
 //   603 = Process was not currently running
 //   604 = Unable to identify system type
 //   605 = Unsupported OS
 //   606 = Unable to load NTDLL.DLL
 //   607 = Unable to get procedure address from NTDLL.DLL
 //   608 = NtQuerySystemInformation failed
 //   609 = Unable to load KERNEL32.DLL
 //   610 = Unable to get procedure address from KERNEL32.DLL
 //   611 = CreateToolhelp32Snapshot failed

Thanks

Ravi Kochhar (source function FIND_PROC_BY_NAME based upon his code)
iceman_k (Find Process By Name) and DITMan (KillProcDLL Manual) for direct me