Can I prevent the user from running multiple instances of the installer?

From NSIS Wiki
Jump to navigationJump to search

The best way is to use a kernel mutex. You can call the Win32 API using the System plug-in. Put this code in the .onInit function:

System::Call 'kernel32::CreateMutex(i 0, i 0, t "myMutex") i .r1 ?e'
Pop $R0
StrCmp $R0 0 +3
  MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running."
  Abort

'myMutex' should be replaced by a unique value (e.g. ProgramSetup.exe).
See also System Plugin Example: Allow only one installer instance