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