mirror of
https://github.com/greenshot/greenshot.git
synced 2025-01-26 07:02:50 -08:00
a07fcc50f9
git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@2589 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4
204 lines
9.8 KiB
NSIS
204 lines
9.8 KiB
NSIS
/*
|
||
|
||
NOTE:
|
||
-----
|
||
This macro is provided for backwards compatibility with NSIS 2.0 scripts.
|
||
It's recommended you update your scripts to use the new Library.nsh macros.
|
||
|
||
|
||
Macro - Upgrade DLL File
|
||
Written by Joost Verburg
|
||
------------------------
|
||
|
||
Parameters:
|
||
LOCALFILE Location of the new DLL file (on the compiler system)
|
||
DESTFILE Location of the DLL file that should be upgraded (on the user's system)
|
||
TEMPBASEDIR Directory on the user's system to store a temporary file when the system has
|
||
to be rebooted.
|
||
For Win9x/ME support, this should be on the same volume as DESTFILE.
|
||
The Windows temp directory could be located on any volume, so you cannot use
|
||
this directory.
|
||
|
||
Define UPGRADEDLL_NOREGISTER if you want to upgrade a DLL that does not have to be registered.
|
||
|
||
Notes:
|
||
|
||
* If you want to support Windows 9x/ME, you can only use short filenames (8.3).
|
||
|
||
* This macro uses the GetDLLVersionLocal command to retrieve the version of local libraries.
|
||
This command is only supported when compiling on a Windows system.
|
||
|
||
------------------------
|
||
|
||
Example:
|
||
|
||
!insertmacro UpgradeDLL "dllname.dll" "$SYSDIR\dllname.dll" "$SYSDIR"
|
||
|
||
*/
|
||
|
||
!ifndef UPGRADEDLL_INCLUDED
|
||
|
||
!define UPGRADEDLL_INCLUDED
|
||
|
||
!macro __UpgradeDLL_Helper_AddRegToolEntry mode filename tempdir
|
||
|
||
Push $R0
|
||
Push $R1
|
||
Push $R2
|
||
Push $R3
|
||
|
||
;------------------------
|
||
;Copy the parameters
|
||
|
||
Push "${filename}"
|
||
Push "${tempdir}"
|
||
|
||
Pop $R2 ; temporary directory
|
||
Pop $R1 ; file name to register
|
||
|
||
;------------------------
|
||
;Advance counter
|
||
|
||
StrCpy $R0 0
|
||
ReadRegDWORD $R0 HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "count"
|
||
IntOp $R0 $R0 + 1
|
||
WriteRegDWORD HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "count" "$R0"
|
||
|
||
;------------------------
|
||
;Setup RegTool
|
||
|
||
ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "NSIS.Library.RegTool.v2"
|
||
StrCpy $R3 $R3 -4 1
|
||
IfFileExists $R3 +3
|
||
|
||
File /oname=$R2\NSIS.Library.RegTool.v2.$HWNDPARENT.exe "${NSISDIR}\Bin\RegTool.bin"
|
||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
|
||
"NSIS.Library.RegTool.v2" '"$R2\NSIS.Library.RegTool.v2.$HWNDPARENT.exe" /S'
|
||
|
||
;------------------------
|
||
;Add RegTool entry
|
||
|
||
WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "$R0.file" "$R1"
|
||
WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "$R0.mode" "${mode}"
|
||
|
||
Pop $R3
|
||
Pop $R2
|
||
Pop $R1
|
||
Pop $R0
|
||
|
||
!macroend
|
||
|
||
!macro UpgradeDLL LOCALFILE DESTFILE TEMPBASEDIR
|
||
|
||
Push $R0
|
||
Push $R1
|
||
Push $R2
|
||
Push $R3
|
||
Push $R4
|
||
Push $R5
|
||
|
||
!define UPGRADEDLL_UNIQUE "${__FILE__}${__LINE__}"
|
||
|
||
SetOverwrite try
|
||
|
||
;------------------------
|
||
;Copy the parameters used on run-time to a variable
|
||
;This allows the usage of variables as paramter
|
||
|
||
StrCpy $R4 "${DESTFILE}"
|
||
StrCpy $R5 "${TEMPBASEDIR}"
|
||
|
||
;------------------------
|
||
;Get version information
|
||
|
||
IfFileExists $R4 0 "upgradedll.copy_${UPGRADEDLL_UNIQUE}"
|
||
|
||
ClearErrors
|
||
GetDLLVersionLocal "${LOCALFILE}" $R0 $R1
|
||
GetDLLVersion $R4 $R2 $R3
|
||
IfErrors "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
|
||
|
||
IntCmpU $R0 $R2 0 "upgradedll.done_${UPGRADEDLL_UNIQUE}" "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
|
||
IntCmpU $R1 $R3 "upgradedll.done_${UPGRADEDLL_UNIQUE}" "upgradedll.done_${UPGRADEDLL_UNIQUE}" \
|
||
"upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
|
||
|
||
;------------------------
|
||
;Upgrade
|
||
|
||
"upgradedll.upgrade_${UPGRADEDLL_UNIQUE}:"
|
||
!ifndef UPGRADEDLL_NOREGISTER
|
||
;Unregister the DLL
|
||
UnRegDLL $R4
|
||
!endif
|
||
|
||
;------------------------
|
||
;Copy
|
||
|
||
ClearErrors
|
||
StrCpy $R0 $R4
|
||
Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
|
||
IfErrors 0 "upgradedll.noreboot_${UPGRADEDLL_UNIQUE}"
|
||
|
||
;------------------------
|
||
;Copy on reboot
|
||
|
||
GetTempFileName $R0 $R5
|
||
Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
|
||
Rename /REBOOTOK $R0 $R4
|
||
|
||
;------------------------
|
||
;Register on reboot
|
||
|
||
!insertmacro __UpgradeDLL_Helper_AddRegToolEntry 'D' $R4 $R5
|
||
|
||
Goto "upgradedll.done_${UPGRADEDLL_UNIQUE}"
|
||
|
||
;------------------------
|
||
;DLL does not exist
|
||
|
||
"upgradedll.copy_${UPGRADEDLL_UNIQUE}:"
|
||
StrCpy $R0 $R4
|
||
Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
|
||
|
||
;------------------------
|
||
;Register
|
||
|
||
"upgradedll.noreboot_${UPGRADEDLL_UNIQUE}:"
|
||
!ifndef UPGRADEDLL_NOREGISTER
|
||
RegDLL $R4
|
||
!endif
|
||
|
||
;------------------------
|
||
;Done
|
||
|
||
"upgradedll.done_${UPGRADEDLL_UNIQUE}:"
|
||
|
||
Pop $R5
|
||
Pop $R4
|
||
Pop $R3
|
||
Pop $R2
|
||
Pop $R1
|
||
Pop $R0
|
||
|
||
;------------------------
|
||
;End
|
||
|
||
Goto "upgradedll.end_${UPGRADEDLL_UNIQUE}"
|
||
|
||
;------------------------
|
||
;Extract
|
||
|
||
"upgradedll.file_${UPGRADEDLL_UNIQUE}:"
|
||
File /oname=$R0 "${LOCALFILE}"
|
||
Return
|
||
|
||
"upgradedll.end_${UPGRADEDLL_UNIQUE}:"
|
||
|
||
SetOverwrite lastused
|
||
|
||
!undef UPGRADEDLL_UNIQUE
|
||
|
||
!macroend
|
||
|
||
!endif
|