Statistiques
| Révision :

root / tmp / org.txm.setups / nsis-2.5 / Include / UpgradeDLL.nsh @ 3106

Historique | Voir | Annoter | Télécharger (4,88 ko)

1 2961 mdecorde
/*
2 2961 mdecorde
3 2961 mdecorde
NOTE:
4 2961 mdecorde
-----
5 2961 mdecorde
This macro is provided for backwards compatibility with NSIS 2.0 scripts.
6 2961 mdecorde
It's recommended you update your scripts to use the new Library.nsh macros.
7 2961 mdecorde
8 2961 mdecorde
9 2961 mdecorde
Macro - Upgrade DLL File
10 2961 mdecorde
Written by Joost Verburg
11 2961 mdecorde
------------------------
12 2961 mdecorde
13 2961 mdecorde
Parameters:
14 2961 mdecorde
LOCALFILE		Location of the new DLL file (on the compiler system)
15 2961 mdecorde
DESTFILE		Location of the DLL file that should be upgraded (on the user's system)
16 2961 mdecorde
TEMPBASEDIR		Directory on the user's system to store a temporary file when the system has
17 2961 mdecorde
				to be rebooted.
18 2961 mdecorde
				For Win9x/ME support, this should be on the same volume as DESTFILE.
19 2961 mdecorde
				The Windows temp directory could be located on any volume, so you cannot use
20 2961 mdecorde
				this directory.
21 2961 mdecorde
22 2961 mdecorde
Define UPGRADEDLL_NOREGISTER if you want to upgrade a DLL that does not have to be registered.
23 2961 mdecorde
24 2961 mdecorde
Notes:
25 2961 mdecorde
26 2961 mdecorde
* If you want to support Windows 9x/ME, you can only use short filenames (8.3).
27 2961 mdecorde
28 2961 mdecorde
* This macro uses the GetDLLVersionLocal command to retrieve the version of local libraries.
29 2961 mdecorde
  This command is only supported when compiling on a Windows system.
30 2961 mdecorde
31 2961 mdecorde
------------------------
32 2961 mdecorde
33 2961 mdecorde
Example:
34 2961 mdecorde
35 2961 mdecorde
!insertmacro UpgradeDLL "dllname.dll" "$SYSDIR\dllname.dll" "$SYSDIR"
36 2961 mdecorde
37 2961 mdecorde
*/
38 2961 mdecorde
39 2961 mdecorde
!ifndef UPGRADEDLL_INCLUDED
40 2961 mdecorde
41 2961 mdecorde
!define UPGRADEDLL_INCLUDED
42 2961 mdecorde
43 2961 mdecorde
!macro __UpgradeDLL_Helper_AddRegToolEntry mode filename tempdir
44 2961 mdecorde
45 2961 mdecorde
  Push $R0
46 2961 mdecorde
  Push $R1
47 2961 mdecorde
  Push $R2
48 2961 mdecorde
  Push $R3
49 2961 mdecorde
50 2961 mdecorde
  ;------------------------
51 2961 mdecorde
  ;Copy the parameters
52 2961 mdecorde
53 2961 mdecorde
  Push "${filename}"
54 2961 mdecorde
  Push "${tempdir}"
55 2961 mdecorde
56 2961 mdecorde
  Pop $R2 ; temporary directory
57 2961 mdecorde
  Pop $R1 ; file name to register
58 2961 mdecorde
59 2961 mdecorde
  ;------------------------
60 2961 mdecorde
  ;Advance counter
61 2961 mdecorde
62 2961 mdecorde
  StrCpy $R0 0
63 2961 mdecorde
  ReadRegDWORD $R0 HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "count"
64 2961 mdecorde
  IntOp $R0 $R0 + 1
65 2961 mdecorde
  WriteRegDWORD HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "count" "$R0"
66 2961 mdecorde
67 2961 mdecorde
  ;------------------------
68 2961 mdecorde
  ;Setup RegTool
69 2961 mdecorde
70 2961 mdecorde
  ReadRegStr $R3 HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" "NSIS.Library.RegTool.v2"
71 2961 mdecorde
  StrCpy $R3 $R3 -4 1
72 2961 mdecorde
  IfFileExists $R3 +3
73 2961 mdecorde
74 2961 mdecorde
    File /oname=$R2\NSIS.Library.RegTool.v2.$HWNDPARENT.exe "${NSISDIR}\Bin\RegTool.bin"
75 2961 mdecorde
    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
76 2961 mdecorde
      "NSIS.Library.RegTool.v2" '"$R2\NSIS.Library.RegTool.v2.$HWNDPARENT.exe" /S'
77 2961 mdecorde
78 2961 mdecorde
  ;------------------------
79 2961 mdecorde
  ;Add RegTool entry
80 2961 mdecorde
81 2961 mdecorde
  WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "$R0.file" "$R1"
82 2961 mdecorde
  WriteRegStr HKLM "Software\NSIS.Library.RegTool.v2\UpgradeDLLSession" "$R0.mode" "${mode}"
83 2961 mdecorde
84 2961 mdecorde
  Pop $R3
85 2961 mdecorde
  Pop $R2
86 2961 mdecorde
  Pop $R1
87 2961 mdecorde
  Pop $R0
88 2961 mdecorde
89 2961 mdecorde
!macroend
90 2961 mdecorde
91 2961 mdecorde
!macro UpgradeDLL LOCALFILE DESTFILE TEMPBASEDIR
92 2961 mdecorde
93 2961 mdecorde
  Push $R0
94 2961 mdecorde
  Push $R1
95 2961 mdecorde
  Push $R2
96 2961 mdecorde
  Push $R3
97 2961 mdecorde
  Push $R4
98 2961 mdecorde
  Push $R5
99 2961 mdecorde
100 2961 mdecorde
  !define UPGRADEDLL_UNIQUE "${__FILE__}${__LINE__}"
101 2961 mdecorde
102 2961 mdecorde
  SetOverwrite try
103 2961 mdecorde
104 2961 mdecorde
  ;------------------------
105 2961 mdecorde
  ;Copy the parameters used on run-time to a variable
106 2961 mdecorde
  ;This allows the usage of variables as paramter
107 2961 mdecorde
108 2961 mdecorde
  StrCpy $R4 "${DESTFILE}"
109 2961 mdecorde
  StrCpy $R5 "${TEMPBASEDIR}"
110 2961 mdecorde
111 2961 mdecorde
  ;------------------------
112 2961 mdecorde
  ;Get version information
113 2961 mdecorde
114 2961 mdecorde
  IfFileExists $R4 0 "upgradedll.copy_${UPGRADEDLL_UNIQUE}"
115 2961 mdecorde
116 2961 mdecorde
  ClearErrors
117 2961 mdecorde
    GetDLLVersionLocal "${LOCALFILE}" $R0 $R1
118 2961 mdecorde
    GetDLLVersion $R4 $R2 $R3
119 2961 mdecorde
  IfErrors "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
120 2961 mdecorde
121 2961 mdecorde
  IntCmpU $R0 $R2 0 "upgradedll.done_${UPGRADEDLL_UNIQUE}" "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
122 2961 mdecorde
  IntCmpU $R1 $R3 "upgradedll.done_${UPGRADEDLL_UNIQUE}" "upgradedll.done_${UPGRADEDLL_UNIQUE}" \
123 2961 mdecorde
    "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}"
124 2961 mdecorde
125 2961 mdecorde
  ;------------------------
126 2961 mdecorde
  ;Upgrade
127 2961 mdecorde
128 2961 mdecorde
  "upgradedll.upgrade_${UPGRADEDLL_UNIQUE}:"
129 2961 mdecorde
    !ifndef UPGRADEDLL_NOREGISTER
130 2961 mdecorde
      ;Unregister the DLL
131 2961 mdecorde
      UnRegDLL $R4
132 2961 mdecorde
    !endif
133 2961 mdecorde
134 2961 mdecorde
  ;------------------------
135 2961 mdecorde
  ;Copy
136 2961 mdecorde
137 2961 mdecorde
  ClearErrors
138 2961 mdecorde
    StrCpy $R0 $R4
139 2961 mdecorde
    Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
140 2961 mdecorde
  IfErrors 0 "upgradedll.noreboot_${UPGRADEDLL_UNIQUE}"
141 2961 mdecorde
142 2961 mdecorde
  ;------------------------
143 2961 mdecorde
  ;Copy on reboot
144 2961 mdecorde
145 2961 mdecorde
  GetTempFileName $R0 $R5
146 2961 mdecorde
    Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
147 2961 mdecorde
  Rename /REBOOTOK $R0 $R4
148 2961 mdecorde
149 2961 mdecorde
  ;------------------------
150 2961 mdecorde
  ;Register on reboot
151 2961 mdecorde
152 2961 mdecorde
  !insertmacro __UpgradeDLL_Helper_AddRegToolEntry 'D' $R4 $R5
153 2961 mdecorde
154 2961 mdecorde
  Goto "upgradedll.done_${UPGRADEDLL_UNIQUE}"
155 2961 mdecorde
156 2961 mdecorde
  ;------------------------
157 2961 mdecorde
  ;DLL does not exist
158 2961 mdecorde
159 2961 mdecorde
  "upgradedll.copy_${UPGRADEDLL_UNIQUE}:"
160 2961 mdecorde
    StrCpy $R0 $R4
161 2961 mdecorde
    Call ":upgradedll.file_${UPGRADEDLL_UNIQUE}"
162 2961 mdecorde
163 2961 mdecorde
  ;------------------------
164 2961 mdecorde
  ;Register
165 2961 mdecorde
166 2961 mdecorde
  "upgradedll.noreboot_${UPGRADEDLL_UNIQUE}:"
167 2961 mdecorde
    !ifndef UPGRADEDLL_NOREGISTER
168 2961 mdecorde
      RegDLL $R4
169 2961 mdecorde
    !endif
170 2961 mdecorde
171 2961 mdecorde
  ;------------------------
172 2961 mdecorde
  ;Done
173 2961 mdecorde
174 2961 mdecorde
  "upgradedll.done_${UPGRADEDLL_UNIQUE}:"
175 2961 mdecorde
176 2961 mdecorde
  Pop $R5
177 2961 mdecorde
  Pop $R4
178 2961 mdecorde
  Pop $R3
179 2961 mdecorde
  Pop $R2
180 2961 mdecorde
  Pop $R1
181 2961 mdecorde
  Pop $R0
182 2961 mdecorde
183 2961 mdecorde
  ;------------------------
184 2961 mdecorde
  ;End
185 2961 mdecorde
186 2961 mdecorde
  Goto "upgradedll.end_${UPGRADEDLL_UNIQUE}"
187 2961 mdecorde
188 2961 mdecorde
  ;------------------------
189 2961 mdecorde
  ;Extract
190 2961 mdecorde
191 2961 mdecorde
  "upgradedll.file_${UPGRADEDLL_UNIQUE}:"
192 2961 mdecorde
    File /oname=$R0 "${LOCALFILE}"
193 2961 mdecorde
    Return
194 2961 mdecorde
195 2961 mdecorde
  "upgradedll.end_${UPGRADEDLL_UNIQUE}:"
196 2961 mdecorde
197 2961 mdecorde
  SetOverwrite lastused
198 2961 mdecorde
199 2961 mdecorde
  !undef UPGRADEDLL_UNIQUE
200 2961 mdecorde
201 2961 mdecorde
!macroend
202 2961 mdecorde
203 2961 mdecorde
!endif