nsProcess NSIS Plugin v1.6
Personal modified version
Original Description
2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
Source function FIND_PROC_BY_NAME based upon the Ravi Kochhar (kochhar@physiology.wisc.edu) code. Thanks iceman_k (FindProcDLL plugin) and DITMan (KillProcDLL plugin) for direct me. NSIS UNICODE compatible version (1.6) by brainsucker.
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)
- The process name is case-insensitive
- Win95/98/ME/NT/2000/XP/Win7 support
- Small plugin size (4 Kb)
- NSIS UNICODE support
Usage
Find process
${nsProcess::FindProcess} "[file.exe]" $var
Parameters:
[file.exe]- Process name (e.g. "notepad.exe")
Return values ($var):
| Code | Description |
|---|---|
| 0 | Success |
| 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 |
Kill/Close process
${nsProcess::KillProcess} "[file.exe]" $var
${nsProcess::CloseProcess} "[file.exe]" $var
Parameters:
[file.exe]- Process name (e.g. "notepad.exe")
Return values ($var):
| Code | Description |
|---|---|
| 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 |
Direct plugin call (without macros)
nsProcess::_CloseProcess "notepad.exe"
Pop $R0
Unload plugin
${nsProcess::Unload}
Example
!include "nsProcess.nsh"
Section "Check Notepad"
${nsProcess::FindProcess} "notepad.exe" $R0
${If} $R0 == 0
MessageBox MB_YESNO "Notepad is running. Close it?" IDNO skip
${nsProcess::CloseProcess} "notepad.exe" $R0
${If} $R0 == 0
MessageBox MB_OK "Notepad closed successfully"
${Else}
MessageBox MB_OK "Failed to close Notepad"
${EndIf}
skip:
${Else}
MessageBox MB_OK "Notepad is not running"
${EndIf}
${nsProcess::Unload}
SectionEnd
Include file
Include nsProcess.nsh to use the macros:
!include "nsProcess.nsh"
⚠️ Differences in the Personal Version
New supported architecture: x64 (amd64-unicode)
The original supported only:
- x86-ansi (Plugins\nsProcess.dll)
- x86-unicode (nsProcessW.dll renamed to nsProcess.dll)
The personal version adds support for:
- amd64-unicode (x64)
Visual Studio Project
The original included:
Source/nsProcess.sln- VS2008 SolutionSource/nsProcess.vcproj- VS2008 Project (x86 only)
The personal version upgrades to VS2022 with x64 support:
nsProcess.sln- VS2022 SolutionnsProcess/nsProcess.vcxproj- VS2022 Project (x86-ansi, x86-unicode, amd64-unicode)
Added Files
build_plugin.py- Python script to compile the plugin for all architecturesnsis/- Folder with NSIS headers for compilation:api.h,crt.c,nsis_tchar.h,pluginapi.c,pluginapi.h
Removed Files
Pre-compiled DLL files have been removed from the distribution:
Plugins/nsProcess.dll(x86 ANSI)nsProcessW.dll(x86 UNICODE)
Build
cd nsProcess
python build_plugin.py
DLLs are copied to plugins/{platform}/nsProcess.dll.
Build Options
python build_plugin.py --config x86-unicode # Single architecture (x86-ansi|x86-unicode|amd64-unicode|all)
python build_plugin.py --toolset 2026 # Specific toolset (2022|2026|auto)
python build_plugin.py --jobs 4 # Number of parallel MSBuild jobs (default: CPU count)
python build_plugin.py --clean # Clean dist/ before build
python build_plugin.py --install-dir "C:\NSIS\Plugins" # Copy to additional NSIS directory
python build_plugin.py --verbose # Extended MSBuild output
python build_plugin.py --version # Print version and exit
Functional Changes
No functional changes compared to the original. Modifications are limited to the build infrastructure and x64 support.
See README_IT.md for the Italian version.