123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- !ifndef __WIN_RESTARTMANAGER__INC
- !define __WIN_RESTARTMANAGER__INC 1
- /**************************************************
- WinBase.h
- **************************************************/
- !define /IfNDef RESTART_MAX_CMD_LINE 1024
- !define /IfNDef RESTART_NO_CRASH 1
- !define /IfNDef RESTART_NO_HANG 2
- !define /IfNDef RESTART_NO_PATCH 4
- !define /IfNDef RESTART_NO_REBOOT 8 ; Do not restart the process when the system is rebooted due to patch installations
- !define /IfNDef RECOVERY_DEFAULT_PING_INTERVAL 5000
- !define /IfNDef /math RECOVERY_MAX_PING_INTERVAL 5000 * 60
- /**************************************************
- RestartManager.h
- **************************************************/
- !define RM_SESSION_KEY_LEN 16
- !define CCH_RM_SESSION_KEY 32
- !define CCH_RM_MAX_APP_NAME 255
- !define CCH_RM_MAX_SVC_NAME 63
- !define RM_INVALID_TS_SESSION -1
- !define RM_INVALID_PROCESS -1
- !define RmUnknownApp 0
- !define RmMainWindow 1
- !define RmOtherWindow 2
- !define RmService 3
- !define RmExplorer 4
- !define RmConsole 5
- !define RmCritical 1000 ; Application is critical system process where a reboot is required to restart
- !define RmForceShutdown 0x1 ; Force unresponsive applications and services to shut down after the timeout period
- !define RmShutdownOnlyRegistered 0x10 ; Only shutdown apps if all apps registered for restart (RegisterApplicationRestart)
- !define RmStatusUnknown 0
- !define RmStatusRunning 1
- !define RmStatusStopped 2 ; Application stopped by Restart Manager
- !define RmStatusStoppedOther 4
- !define RmStatusRestarted 8
- !define RmStatusErrorOnStop 0x10
- !define RmStatusErrorOnRestart 0x20
- !define RmStatusShutdownMasked 0x40
- !define RmStatusRestartMasked 0x80
- !define RmRebootReasonNone 0
- !define RmRebootReasonPermissionDenied 1
- !define RmRebootReasonSessionMismatch 2
- !define RmRebootReasonCriticalProcess 4
- !define RmRebootReasonCriticalService 8
- !define RmRebootReasonDetectedSelf 0x10
- !define SYSSIZEOF_RM_UNIQUE_PROCESS 12
- !define SYSSTRUCT_RM_UNIQUE_PROCESS (i,l)
- !include LogicLib.nsh
- !include Util.nsh
- !macro RestartManager_StartSession outvarhandle
- System::Call 'RSTRTMGR::RmStartSession(*i-1s, i0, w)i.s'
- Pop ${outvarhandle}
- ${If} ${outvarhandle} <> 0
- ${OrIf} ${outvarhandle} == error
- Pop ${outvarhandle}
- Push ""
- ${EndIf}
- Pop ${outvarhandle}
- !macroend
- !macro RestartManager_EndSession handle
- System::Call 'RSTRTMGR::RmEndSession(i${handle})'
- !macroend
- !macro RestartManager_RegisterFile handle path
- System::Call 'RSTRTMGR::RmRegisterResources(i${handle},i1,*ws,i0,p0,i0,p0)i.r0' "${path}"
- !macroend
- !macro RestartManager_Shutdown handle
- System::Call 'RSTRTMGR::RmShutdown(i${handle}, i${RmForceShutdown}, p0)'
- !macroend
- !macro RestartManager_Restart handle
- System::Call 'RSTRTMGR::RmRestart(i${handle}, i0, p0)'
- !macroend
- !macro RestartManager_ShutdownFile fullpath outvar_errcode
- Push "${fullpath}"
- !insertmacro CallArtificialFunction RestartManager_ShutdownFileImp
- Pop ${outvar_errcode}
- !macroend
- !macro RestartManager_ShutdownFileImp
- Exch $1
- Push $0
- System::Call 'RSTRTMGR::RmStartSession(*i-1s, i0, w)i.r0'
- ${If} $0 == error
- Pop $0
- StrCpy $0 1150
- ${Else}
- System::Call 'RSTRTMGR::RmRegisterResources(isr1,i1,*wr1,i0,p0,i0,p0)i.r0'
- ${If} $0 = 0
- System::Call 'RSTRTMGR::RmShutdown(ir1, i${RmForceShutdown}, p0)i.r0'
- ${EndIf}
- System::Call 'RSTRTMGR::RmEndSession(ir1)'
- ${EndIf}
- Exch
- Pop $1
- Exch $0
- !macroend
- !endif ;~ Include guard
|