118 lines
3.4 KiB
Plaintext
118 lines
3.4 KiB
Plaintext
!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
|