root / tmp / org.txm.setups / nsis-2.5 / Include / WinVer.nsh @ 3100
Historique | Voir | Annoter | Télécharger (13,93 ko)
1 | 2961 | mdecorde | ; --------------------- |
---|---|---|---|
2 | 2961 | mdecorde | ; WinVer.nsh |
3 | 2961 | mdecorde | ; --------------------- |
4 | 2961 | mdecorde | ; |
5 | 2961 | mdecorde | ; LogicLib extensions for handling Windows versions and service packs. |
6 | 2961 | mdecorde | ; |
7 | 2961 | mdecorde | ; IsNT checks if the installer is running on Windows NT family (NT4, 2000, XP, etc.) |
8 | 2961 | mdecorde | ; |
9 | 2961 | mdecorde | ; ${If} ${IsNT} |
10 | 2961 | mdecorde | ; DetailPrint "Running on NT. Installing Unicode enabled application." |
11 | 2961 | mdecorde | ; ${Else} |
12 | 2961 | mdecorde | ; DetailPrint "Not running on NT. Installing ANSI application." |
13 | 2961 | mdecorde | ; ${EndIf} |
14 | 2961 | mdecorde | ; |
15 | 2961 | mdecorde | ; IsServer checks if the installer is running on a server version of Windows (NT4, 2003, 2008, etc.) |
16 | 2961 | mdecorde | ; |
17 | 2961 | mdecorde | ; AtLeastWin<version> checks if the installer is running on Windows version at least as specified. |
18 | 2961 | mdecorde | ; IsWin<version> checks if the installer is running on Windows version exactly as specified. |
19 | 2961 | mdecorde | ; AtMostWin<version> checks if the installer is running on Windows version at most as specified. |
20 | 2961 | mdecorde | ; |
21 | 2961 | mdecorde | ; <version> can be replaced with the following values: |
22 | 2961 | mdecorde | ; |
23 | 2961 | mdecorde | ; 95 |
24 | 2961 | mdecorde | ; 98 |
25 | 2961 | mdecorde | ; ME |
26 | 2961 | mdecorde | ; |
27 | 2961 | mdecorde | ; NT4 |
28 | 2961 | mdecorde | ; 2000 |
29 | 2961 | mdecorde | ; XP |
30 | 2961 | mdecorde | ; 2003 |
31 | 2961 | mdecorde | ; Vista |
32 | 2961 | mdecorde | ; 2008 |
33 | 2961 | mdecorde | ; 7 |
34 | 2961 | mdecorde | ; 2008R2 |
35 | 2961 | mdecorde | ; 8 |
36 | 2961 | mdecorde | ; 2012 |
37 | 2961 | mdecorde | ; |
38 | 2961 | mdecorde | ; AtLeastServicePack checks if the installer is running on Windows service pack version at least as specified. |
39 | 2961 | mdecorde | ; IsServicePack checks if the installer is running on Windows service pack version exactly as specified. |
40 | 2961 | mdecorde | ; AtMostServicePack checks if the installer is running on Windows service version pack at most as specified. |
41 | 2961 | mdecorde | ; |
42 | 2961 | mdecorde | ; Usage examples: |
43 | 2961 | mdecorde | ; |
44 | 2961 | mdecorde | ; ${If} ${IsNT} |
45 | 2961 | mdecorde | ; DetailPrint "Running on NT family." |
46 | 2961 | mdecorde | ; DetailPrint "Surely not running on 95, 98 or ME." |
47 | 2961 | mdecorde | ; ${AndIf} ${AtLeastWinNT4} |
48 | 2961 | mdecorde | ; DetailPrint "Running on NT4 or better. Could even be 2003." |
49 | 2961 | mdecorde | ; ${EndIf} |
50 | 2961 | mdecorde | ; |
51 | 2961 | mdecorde | ; ${If} ${AtLeastWinXP} |
52 | 2961 | mdecorde | ; DetailPrint "Running on XP or better." |
53 | 2961 | mdecorde | ; ${EndIf} |
54 | 2961 | mdecorde | ; |
55 | 2961 | mdecorde | ; ${If} ${IsWin2000} |
56 | 2961 | mdecorde | ; DetailPrint "Running on 2000." |
57 | 2961 | mdecorde | ; ${EndIf} |
58 | 2961 | mdecorde | ; |
59 | 2961 | mdecorde | ; ${If} ${IsWin2000} |
60 | 2961 | mdecorde | ; ${AndIf} ${AtLeastServicePack} 3 |
61 | 2961 | mdecorde | ; ${OrIf} ${AtLeastWinXP} |
62 | 2961 | mdecorde | ; DetailPrint "Running Win2000 SP3 or above" |
63 | 2961 | mdecorde | ; ${EndIf} |
64 | 2961 | mdecorde | ; |
65 | 2961 | mdecorde | ; ${If} ${AtMostWinXP} |
66 | 2961 | mdecorde | ; DetailPrint "Running on XP or older. Surely not running on Vista. Maybe 98, or even 95." |
67 | 2961 | mdecorde | ; ${EndIf} |
68 | 2961 | mdecorde | ; |
69 | 2961 | mdecorde | ; Warning: |
70 | 2961 | mdecorde | ; |
71 | 2961 | mdecorde | ; Windows 95 and NT both use the same version number. To avoid getting NT4 misidentified |
72 | 2961 | mdecorde | ; as Windows 95 and vice-versa or 98 as a version higher than NT4, always use IsNT to |
73 | 2961 | mdecorde | ; check if running on the NT family. |
74 | 2961 | mdecorde | ; |
75 | 2961 | mdecorde | ; ${If} ${AtLeastWin95} |
76 | 2961 | mdecorde | ; ${And} ${AtMostWinME} |
77 | 2961 | mdecorde | ; DetailPrint "Running 95, 98 or ME." |
78 | 2961 | mdecorde | ; DetailPrint "Actually, maybe it's NT4?" |
79 | 2961 | mdecorde | ; ${If} ${IsNT} |
80 | 2961 | mdecorde | ; DetailPrint "Yes, it's NT4! oops..." |
81 | 2961 | mdecorde | ; ${Else} |
82 | 2961 | mdecorde | ; DetailPrint "Nope, not NT4. phew..." |
83 | 2961 | mdecorde | ; ${EndIf} |
84 | 2961 | mdecorde | ; ${EndIf} |
85 | 2961 | mdecorde | ; |
86 | 2961 | mdecorde | ; |
87 | 2961 | mdecorde | ; Other useful extensions are: |
88 | 2961 | mdecorde | ; |
89 | 2961 | mdecorde | ; * IsWin2003R2 |
90 | 2961 | mdecorde | ; * IsStarterEdition |
91 | 2961 | mdecorde | ; * OSHasMediaCenter |
92 | 2961 | mdecorde | ; * OSHasTabletSupport |
93 | 2961 | mdecorde | ; |
94 | 2961 | mdecorde | |
95 | 2961 | mdecorde | !verbose push |
96 | 2961 | mdecorde | !verbose 3 |
97 | 2961 | mdecorde | |
98 | 2961 | mdecorde | !ifndef ___WINVER__NSH___ |
99 | 2961 | mdecorde | !define ___WINVER__NSH___ |
100 | 2961 | mdecorde | |
101 | 2961 | mdecorde | !include LogicLib.nsh |
102 | 2961 | mdecorde | !include Util.nsh |
103 | 2961 | mdecorde | |
104 | 2961 | mdecorde | # masks for our variables |
105 | 2961 | mdecorde | |
106 | 2961 | mdecorde | !define _WINVER_VERXBIT 0x00000001 |
107 | 2961 | mdecorde | !define _WINVER_MASKVMAJ 0x7F000000 |
108 | 2961 | mdecorde | !define _WINVER_MASKVMIN 0x00FF0000 |
109 | 2961 | mdecorde | |
110 | 2961 | mdecorde | !define _WINVER_NTBIT 0x80000000 |
111 | 2961 | mdecorde | !define _WINVER_NTMASK 0x7FFFFFFF |
112 | 2961 | mdecorde | !define _WINVER_NTSRVBIT 0x40000000 |
113 | 2961 | mdecorde | !define _WINVER_MASKVBLD 0x0000FFFF |
114 | 2961 | mdecorde | !define _WINVER_MASKSP 0x000F0000 |
115 | 2961 | mdecorde | |
116 | 2961 | mdecorde | # possible variable values for different versions |
117 | 2961 | mdecorde | |
118 | 2961 | mdecorde | !define WINVER_95_NT 0x04000000 ;4.00.0950 |
119 | 2961 | mdecorde | !define WINVER_95 0x04000000 ;4.00.0950 |
120 | 2961 | mdecorde | !define WINVER_98_NT 0x040a0000 ;4.10.1998 |
121 | 2961 | mdecorde | !define WINVER_98 0x040a0000 ;4.10.1998 |
122 | 2961 | mdecorde | ;define WINVER_98SE 0x040a0000 ;4.10.2222 |
123 | 2961 | mdecorde | !define WINVER_ME_NT 0x045a0000 ;4.90.3000 |
124 | 2961 | mdecorde | !define WINVER_ME 0x045a0000 ;4.90.3000 |
125 | 2961 | mdecorde | ;define WINVER_NT3d51 ;3.51.1057 |
126 | 2961 | mdecorde | !define WINVER_NT4_NT 0x84000000 ;4.00.1381 |
127 | 2961 | mdecorde | !define WINVER_NT4 0x04000000 ;4.00.1381 |
128 | 2961 | mdecorde | !define WINVER_2000_NT 0x85000000 ;5.00.2195 |
129 | 2961 | mdecorde | !define WINVER_2000 0x05000000 ;5.00.2195 |
130 | 2961 | mdecorde | !define WINVER_XP_NT 0x85010000 ;5.01.2600 |
131 | 2961 | mdecorde | !define WINVER_XP 0x05010000 ;5.01.2600 |
132 | 2961 | mdecorde | ;define WINVER_XP64 ;5.02.3790 |
133 | 2961 | mdecorde | !define WINVER_2003_NT 0x85020000 ;5.02.3790 |
134 | 2961 | mdecorde | !define WINVER_2003 0x05020000 ;5.02.3790 |
135 | 2961 | mdecorde | !define WINVER_VISTA_NT 0x86000000 ;6.00.6000 |
136 | 2961 | mdecorde | !define WINVER_VISTA 0x06000000 ;6.00.6000 |
137 | 2961 | mdecorde | !define WINVER_2008_NT 0x86000001 ;6.00.6001 |
138 | 2961 | mdecorde | !define WINVER_2008 0x06000001 ;6.00.6001 |
139 | 2961 | mdecorde | !define WINVER_7_NT 0x86010000 ;6.01.7600 |
140 | 2961 | mdecorde | !define WINVER_7 0x06010000 ;6.01.7600 |
141 | 2961 | mdecorde | !define WINVER_2008R2_NT 0x86010001 ;6.01.7600 |
142 | 2961 | mdecorde | !define WINVER_2008R2 0x06010001 ;6.01.7600 |
143 | 2961 | mdecorde | !define WINVER_8_NT 0x86020000 ;6.02.9200 |
144 | 2961 | mdecorde | !define WINVER_8 0x06020000 ;6.02.9200 |
145 | 2961 | mdecorde | !define WINVER_2012_NT 0x86020001 ;6.02.9200 |
146 | 2961 | mdecorde | !define WINVER_2012 0x06020001 ;6.02.9200 |
147 | 2961 | mdecorde | |
148 | 2961 | mdecorde | |
149 | 2961 | mdecorde | # use this to make all nt > 9x |
150 | 2961 | mdecorde | |
151 | 2961 | mdecorde | !ifdef WINVER_NT4_OVER_W95 |
152 | 2961 | mdecorde | !define __WINVERTMP ${WINVER_NT4} |
153 | 2961 | mdecorde | !undef WINVER_NT4 |
154 | 2961 | mdecorde | !define /math WINVER_NT4 ${__WINVERTMP} | ${_WINVER_VERXBIT} |
155 | 2961 | mdecorde | !undef __WINVERTMP |
156 | 2961 | mdecorde | !endif |
157 | 2961 | mdecorde | |
158 | 2961 | mdecorde | # some definitions from header files |
159 | 2961 | mdecorde | |
160 | 2961 | mdecorde | !define OSVERSIONINFOA_SIZE 148 |
161 | 2961 | mdecorde | !define OSVERSIONINFOEXA_SIZE 156 |
162 | 2961 | mdecorde | !define VER_PLATFORM_WIN32_NT 2 |
163 | 2961 | mdecorde | !define VER_NT_WORKSTATION 1 |
164 | 2961 | mdecorde | |
165 | 2961 | mdecorde | !define SM_TABLETPC 86 |
166 | 2961 | mdecorde | !define SM_MEDIACENTER 87 |
167 | 2961 | mdecorde | !define SM_STARTER 88 |
168 | 2961 | mdecorde | !define SM_SERVERR2 89 |
169 | 2961 | mdecorde | |
170 | 2961 | mdecorde | # variable declaration |
171 | 2961 | mdecorde | |
172 | 2961 | mdecorde | !macro __WinVer_DeclareVars |
173 | 2961 | mdecorde | |
174 | 2961 | mdecorde | !ifndef __WINVER_VARS_DECLARED |
175 | 2961 | mdecorde | |
176 | 2961 | mdecorde | !define __WINVER_VARS_DECLARED |
177 | 2961 | mdecorde | |
178 | 2961 | mdecorde | Var /GLOBAL __WINVERV |
179 | 2961 | mdecorde | Var /GLOBAL __WINVERSP |
180 | 2961 | mdecorde | |
181 | 2961 | mdecorde | !endif |
182 | 2961 | mdecorde | |
183 | 2961 | mdecorde | !macroend |
184 | 2961 | mdecorde | |
185 | 2961 | mdecorde | # lazy initialization macro |
186 | 2961 | mdecorde | |
187 | 2961 | mdecorde | !ifmacrondef __WinVer_Call_GetVersionEx |
188 | 2961 | mdecorde | |
189 | 2961 | mdecorde | !macro __WinVer_Call_GetVersionEx STRUCT_SIZE |
190 | 2961 | mdecorde | |
191 | 2961 | mdecorde | System::Call '*$0(i ${STRUCT_SIZE})' |
192 | 2961 | mdecorde | System::Call kernel32::GetVersionEx(ir0)i.r3 |
193 | 2961 | mdecorde | |
194 | 2961 | mdecorde | !macroend |
195 | 2961 | mdecorde | |
196 | 2961 | mdecorde | !endif |
197 | 2961 | mdecorde | |
198 | 2961 | mdecorde | !macro __WinVer_InitVars |
199 | 2961 | mdecorde | # variables |
200 | 2961 | mdecorde | !insertmacro __WinVer_DeclareVars |
201 | 2961 | mdecorde | |
202 | 2961 | mdecorde | # only calculate version once |
203 | 2961 | mdecorde | StrCmp $__WINVERV "" _winver_noveryet |
204 | 2961 | mdecorde | Return |
205 | 2961 | mdecorde | _winver_noveryet: |
206 | 2961 | mdecorde | |
207 | 2961 | mdecorde | # push used registers on the stack |
208 | 2961 | mdecorde | Push $0 |
209 | 2961 | mdecorde | Push $1 ;maj |
210 | 2961 | mdecorde | Push $2 ;min |
211 | 2961 | mdecorde | Push $3 ;bld |
212 | 2961 | mdecorde | Push $R0 ;temp |
213 | 2961 | mdecorde | |
214 | 2961 | mdecorde | # allocate memory |
215 | 2961 | mdecorde | System::Alloc ${OSVERSIONINFOEXA_SIZE} |
216 | 2961 | mdecorde | Pop $0 |
217 | 2961 | mdecorde | |
218 | 2961 | mdecorde | # use OSVERSIONINFOEX |
219 | 2961 | mdecorde | !insertmacro __WinVer_Call_GetVersionEx ${OSVERSIONINFOEXA_SIZE} |
220 | 2961 | mdecorde | |
221 | 2961 | mdecorde | IntCmp $3 0 "" _winver_ex _winver_ex |
222 | 2961 | mdecorde | # OSVERSIONINFOEX not allowed (Win9x or NT4 w/SP < 6), use OSVERSIONINFO |
223 | 2961 | mdecorde | !insertmacro __WinVer_Call_GetVersionEx ${OSVERSIONINFOA_SIZE} |
224 | 2961 | mdecorde | _winver_ex: |
225 | 2961 | mdecorde | |
226 | 2961 | mdecorde | # get results from struct |
227 | 2961 | mdecorde | System::Call '*$0(i.s,i.r1,i.r2,i.r3,i.s,&t128.s,&i2.s,&i2,&i2,&i1.s,&i1)' |
228 | 2961 | mdecorde | |
229 | 2961 | mdecorde | # free struct |
230 | 2961 | mdecorde | System::Free $0 |
231 | 2961 | mdecorde | |
232 | 2961 | mdecorde | # win9x has major and minor info in high word of dwBuildNumber - remove it |
233 | 2961 | mdecorde | IntOp $3 $3 & 0xFFFF |
234 | 2961 | mdecorde | |
235 | 2961 | mdecorde | # get dwOSVersionInfoSize |
236 | 2961 | mdecorde | Pop $R0 |
237 | 2961 | mdecorde | |
238 | 2961 | mdecorde | # get dwPlatformId |
239 | 2961 | mdecorde | Pop $0 |
240 | 2961 | mdecorde | |
241 | 2961 | mdecorde | # NT? |
242 | 2961 | mdecorde | IntCmp $0 ${VER_PLATFORM_WIN32_NT} "" _winver_notnt _winver_notnt |
243 | 2961 | mdecorde | IntOp $__WINVERSP $__WINVERSP | ${_WINVER_NTBIT} |
244 | 2961 | mdecorde | IntOp $__WINVERV $__WINVERV | ${_WINVER_NTBIT} |
245 | 2961 | mdecorde | _winver_notnt: |
246 | 2961 | mdecorde | |
247 | 2961 | mdecorde | # get service pack information |
248 | 2961 | mdecorde | IntCmp $0 ${VER_PLATFORM_WIN32_NT} _winver_nt "" _winver_nt # win9x |
249 | 2961 | mdecorde | |
250 | 2961 | mdecorde | # get szCSDVersion |
251 | 2961 | mdecorde | Pop $0 |
252 | 2961 | mdecorde | |
253 | 2961 | mdecorde | # copy second char |
254 | 2961 | mdecorde | StrCpy $0 $0 1 1 |
255 | 2961 | mdecorde | |
256 | 2961 | mdecorde | # discard invalid wServicePackMajor and wProductType |
257 | 2961 | mdecorde | Pop $R0 |
258 | 2961 | mdecorde | Pop $R0 |
259 | 2961 | mdecorde | |
260 | 2961 | mdecorde | # switch |
261 | 2961 | mdecorde | StrCmp $0 'A' "" +3 |
262 | 2961 | mdecorde | StrCpy $0 1 |
263 | 2961 | mdecorde | Goto _winver_sp_done |
264 | 2961 | mdecorde | StrCmp $0 'B' "" +3 |
265 | 2961 | mdecorde | StrCpy $0 2 |
266 | 2961 | mdecorde | Goto _winver_sp_done |
267 | 2961 | mdecorde | StrCmp $0 'C' "" +3 |
268 | 2961 | mdecorde | StrCpy $0 3 |
269 | 2961 | mdecorde | Goto _winver_sp_done |
270 | 2961 | mdecorde | StrCpy $0 0 |
271 | 2961 | mdecorde | Goto _winver_sp_done |
272 | 2961 | mdecorde | |
273 | 2961 | mdecorde | _winver_nt: # nt |
274 | 2961 | mdecorde | |
275 | 2961 | mdecorde | IntCmp $R0 ${OSVERSIONINFOEXA_SIZE} "" _winver_sp_noex _winver_sp_noex |
276 | 2961 | mdecorde | |
277 | 2961 | mdecorde | # discard szCSDVersion |
278 | 2961 | mdecorde | Pop $0 |
279 | 2961 | mdecorde | |
280 | 2961 | mdecorde | # get wProductType |
281 | 2961 | mdecorde | Exch |
282 | 2961 | mdecorde | Pop $0 |
283 | 2961 | mdecorde | |
284 | 2961 | mdecorde | # is server? |
285 | 2961 | mdecorde | IntCmp $0 ${VER_NT_WORKSTATION} _winver_noserver _winver_noserver "" |
286 | 2961 | mdecorde | IntOp $__WINVERSP $__WINVERSP | ${_WINVER_NTSRVBIT} |
287 | 2961 | mdecorde | _winver_noserver: |
288 | 2961 | mdecorde | |
289 | 2961 | mdecorde | # get wServicePackMajor |
290 | 2961 | mdecorde | Pop $0 |
291 | 2961 | mdecorde | |
292 | 2961 | mdecorde | # done with sp |
293 | 2961 | mdecorde | Goto _winver_sp_done |
294 | 2961 | mdecorde | |
295 | 2961 | mdecorde | _winver_sp_noex: # OSVERSIONINFO, not OSVERSIONINFOEX |
296 | 2961 | mdecorde | |
297 | 2961 | mdecorde | #### TODO |
298 | 2961 | mdecorde | ## For IsServer to support < NT4SP6, we need to check the registry |
299 | 2961 | mdecorde | ## here to see if we are a server and/or DC |
300 | 2961 | mdecorde | |
301 | 2961 | mdecorde | # get szCSDVersion |
302 | 2961 | mdecorde | Pop $0 |
303 | 2961 | mdecorde | |
304 | 2961 | mdecorde | # discard invalid wServicePackMajor and wProductType |
305 | 2961 | mdecorde | Pop $R0 |
306 | 2961 | mdecorde | Pop $R0 |
307 | 2961 | mdecorde | |
308 | 2961 | mdecorde | # get service pack number from text |
309 | 2961 | mdecorde | StrCpy $R0 $0 13 |
310 | 2961 | mdecorde | StrCmp $R0 "Service Pack " "" +3 |
311 | 2961 | mdecorde | StrCpy $0 $0 "" 13 # cut "Service Pack " |
312 | 2961 | mdecorde | Goto +2 |
313 | 2961 | mdecorde | StrCpy $0 0 # no service pack |
314 | 2961 | mdecorde | |
315 | 2961 | mdecorde | !ifdef WINVER_NT4_OVER_W95 |
316 | 2961 | mdecorde | IntOp $__WINVERV $__WINVERV | ${_WINVER_VERXBIT} |
317 | 2961 | mdecorde | !endif |
318 | 2961 | mdecorde | |
319 | 2961 | mdecorde | _winver_sp_done: |
320 | 2961 | mdecorde | |
321 | 2961 | mdecorde | # store service pack |
322 | 2961 | mdecorde | IntOp $0 $0 << 16 |
323 | 2961 | mdecorde | IntOp $__WINVERSP $__WINVERSP | $0 |
324 | 2961 | mdecorde | |
325 | 2961 | mdecorde | ### now for the version |
326 | 2961 | mdecorde | |
327 | 2961 | mdecorde | # is server? |
328 | 2961 | mdecorde | IntOp $0 $__WINVERSP & ${_WINVER_NTSRVBIT} |
329 | 2961 | mdecorde | |
330 | 2961 | mdecorde | # windows xp x64? |
331 | 2961 | mdecorde | IntCmp $0 0 "" _winver_not_xp_x64 _winver_not_xp_x64 # not server |
332 | 2961 | mdecorde | IntCmp $1 5 "" _winver_not_xp_x64 _winver_not_xp_x64 # maj 5 |
333 | 2961 | mdecorde | IntCmp $2 2 "" _winver_not_xp_x64 _winver_not_xp_x64 # min 2 |
334 | 2961 | mdecorde | # change XP x64 from 5.2 to 5.1 so it's still XP |
335 | 2961 | mdecorde | StrCpy $2 1 |
336 | 2961 | mdecorde | _winver_not_xp_x64: |
337 | 2961 | mdecorde | |
338 | 2961 | mdecorde | # server 2008? |
339 | 2961 | mdecorde | IntCmp $0 0 _winver_not_ntserver # server |
340 | 2961 | mdecorde | IntCmp 6 $1 "" "" _winver_not_ntserver # maj 6 |
341 | 2961 | mdecorde | # extra bit so Server 2008 comes after Vista SP1 that has the same minor version, same for Win7 vs 2008R2 |
342 | 2961 | mdecorde | IntOp $__WINVERV $__WINVERV | ${_WINVER_VERXBIT} |
343 | 2961 | mdecorde | _winver_not_ntserver: |
344 | 2961 | mdecorde | |
345 | 2961 | mdecorde | # pack version |
346 | 2961 | mdecorde | IntOp $1 $1 << 24 # VerMajor |
347 | 2961 | mdecorde | IntOp $__WINVERV $__WINVERV | $1 |
348 | 2961 | mdecorde | IntOp $0 $2 << 16 |
349 | 2961 | mdecorde | IntOp $__WINVERV $__WINVERV | $0 # VerMinor |
350 | 2961 | mdecorde | IntOp $__WINVERSP $__WINVERSP | $3 # VerBuild |
351 | 2961 | mdecorde | |
352 | 2961 | mdecorde | # restore registers |
353 | 2961 | mdecorde | Pop $R0 |
354 | 2961 | mdecorde | Pop $3 |
355 | 2961 | mdecorde | Pop $2 |
356 | 2961 | mdecorde | Pop $1 |
357 | 2961 | mdecorde | Pop $0 |
358 | 2961 | mdecorde | |
359 | 2961 | mdecorde | !macroend |
360 | 2961 | mdecorde | |
361 | 2961 | mdecorde | # version comparison LogicLib macros |
362 | 2961 | mdecorde | |
363 | 2961 | mdecorde | !macro _WinVerAtLeast _a _b _t _f |
364 | 2961 | mdecorde | !insertmacro _LOGICLIB_TEMP |
365 | 2961 | mdecorde | ${CallArtificialFunction} __WinVer_InitVars |
366 | 2961 | mdecorde | IntOp $_LOGICLIB_TEMP $__WINVERV & ${_WINVER_NTMASK} |
367 | 2961 | mdecorde | !insertmacro _>= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}` |
368 | 2961 | mdecorde | !macroend |
369 | 2961 | mdecorde | !macro _WinVerIs _a _b _t _f |
370 | 2961 | mdecorde | ${CallArtificialFunction} __WinVer_InitVars |
371 | 2961 | mdecorde | !insertmacro _= $__WINVERV `${_b}` `${_t}` `${_f}` |
372 | 2961 | mdecorde | !macroend |
373 | 2961 | mdecorde | !macro _WinVerAtMost _a _b _t _f |
374 | 2961 | mdecorde | !insertmacro _LOGICLIB_TEMP |
375 | 2961 | mdecorde | ${CallArtificialFunction} __WinVer_InitVars |
376 | 2961 | mdecorde | IntOp $_LOGICLIB_TEMP $__WINVERV & ${_WINVER_NTMASK} |
377 | 2961 | mdecorde | !insertmacro _<= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}` |
378 | 2961 | mdecorde | !macroend |
379 | 2961 | mdecorde | |
380 | 2961 | mdecorde | !macro __WinVer_DefineOSTest Test OS Suffix |
381 | 2961 | mdecorde | !define ${Test}Win${OS} `"" WinVer${Test} ${WINVER_${OS}${Suffix}}` |
382 | 2961 | mdecorde | !macroend |
383 | 2961 | mdecorde | |
384 | 2961 | mdecorde | !macro __WinVer_DefineOSTests Test Suffix |
385 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} 95 '${Suffix}' |
386 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} 98 '${Suffix}' |
387 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} ME '${Suffix}' |
388 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} NT4 '${Suffix}' |
389 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} 2000 '${Suffix}' |
390 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} XP '${Suffix}' |
391 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} 2003 '${Suffix}' |
392 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} VISTA '${Suffix}' |
393 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} 2008 '${Suffix}' |
394 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} 7 '${Suffix}' |
395 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} 2008R2 '${Suffix}' |
396 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} 8 '${Suffix}' |
397 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTest ${Test} 2012 '${Suffix}' |
398 | 2961 | mdecorde | !macroend |
399 | 2961 | mdecorde | |
400 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTests AtLeast "" |
401 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTests Is _NT |
402 | 2961 | mdecorde | !insertmacro __WinVer_DefineOSTests AtMost "" |
403 | 2961 | mdecorde | |
404 | 2961 | mdecorde | # version feature LogicLib macros |
405 | 2961 | mdecorde | |
406 | 2961 | mdecorde | !macro _IsNT _a _b _t _f |
407 | 2961 | mdecorde | !insertmacro _LOGICLIB_TEMP |
408 | 2961 | mdecorde | ${CallArtificialFunction} __WinVer_InitVars |
409 | 2961 | mdecorde | IntOp $_LOGICLIB_TEMP $__WINVERSP & ${_WINVER_NTBIT} |
410 | 2961 | mdecorde | !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}` |
411 | 2961 | mdecorde | !macroend |
412 | 2961 | mdecorde | !define IsNT `"" IsNT ""` |
413 | 2961 | mdecorde | |
414 | 2961 | mdecorde | !macro _IsServerOS _a _b _t _f |
415 | 2961 | mdecorde | !insertmacro _LOGICLIB_TEMP |
416 | 2961 | mdecorde | ${CallArtificialFunction} __WinVer_InitVars |
417 | 2961 | mdecorde | IntOp $_LOGICLIB_TEMP $__WINVERSP & ${_WINVER_NTSRVBIT} |
418 | 2961 | mdecorde | !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}` |
419 | 2961 | mdecorde | !macroend |
420 | 2961 | mdecorde | !define IsServerOS `"" IsServerOS ""` |
421 | 2961 | mdecorde | |
422 | 2961 | mdecorde | # service pack macros |
423 | 2961 | mdecorde | |
424 | 2961 | mdecorde | !macro _WinVer_GetServicePackLevel OUTVAR |
425 | 2961 | mdecorde | ${CallArtificialFunction} __WinVer_InitVars |
426 | 2961 | mdecorde | IntOp ${OUTVAR} $__WINVERSP & ${_WINVER_MASKSP} |
427 | 2961 | mdecorde | IntOp ${OUTVAR} ${OUTVAR} >> 16 |
428 | 2961 | mdecorde | !macroend |
429 | 2961 | mdecorde | !define WinVerGetServicePackLevel '!insertmacro _WinVer_GetServicePackLevel ' |
430 | 2961 | mdecorde | |
431 | 2961 | mdecorde | !macro _AtLeastServicePack _a _b _t _f |
432 | 2961 | mdecorde | !insertmacro _LOGICLIB_TEMP |
433 | 2961 | mdecorde | ${WinVerGetServicePackLevel} $_LOGICLIB_TEMP |
434 | 2961 | mdecorde | !insertmacro _>= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}` |
435 | 2961 | mdecorde | !macroend |
436 | 2961 | mdecorde | !define AtLeastServicePack `"" AtLeastServicePack` |
437 | 2961 | mdecorde | |
438 | 2961 | mdecorde | !macro _AtMostServicePack _a _b _t _f |
439 | 2961 | mdecorde | !insertmacro _LOGICLIB_TEMP |
440 | 2961 | mdecorde | ${WinVerGetServicePackLevel} $_LOGICLIB_TEMP |
441 | 2961 | mdecorde | !insertmacro _<= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}` |
442 | 2961 | mdecorde | !macroend |
443 | 2961 | mdecorde | !define AtMostServicePack `"" AtMostServicePack` |
444 | 2961 | mdecorde | |
445 | 2961 | mdecorde | !macro _IsServicePack _a _b _t _f |
446 | 2961 | mdecorde | !insertmacro _LOGICLIB_TEMP |
447 | 2961 | mdecorde | ${WinVerGetServicePackLevel} $_LOGICLIB_TEMP |
448 | 2961 | mdecorde | !insertmacro _= $_LOGICLIB_TEMP `${_b}` `${_t}` `${_f}` |
449 | 2961 | mdecorde | !macroend |
450 | 2961 | mdecorde | !define IsServicePack `"" IsServicePack` |
451 | 2961 | mdecorde | |
452 | 2961 | mdecorde | # special feature LogicLib macros |
453 | 2961 | mdecorde | |
454 | 2961 | mdecorde | !macro _WinVer_SysMetricCheck m _b _t _f |
455 | 2961 | mdecorde | !insertmacro _LOGICLIB_TEMP |
456 | 2961 | mdecorde | System::Call user32::GetSystemMetrics(i${m})i.s |
457 | 2961 | mdecorde | pop $_LOGICLIB_TEMP |
458 | 2961 | mdecorde | !insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}` |
459 | 2961 | mdecorde | !macroend |
460 | 2961 | mdecorde | |
461 | 2961 | mdecorde | !define IsWin2003R2 `${SM_SERVERR2} WinVer_SysMetricCheck ""` |
462 | 2961 | mdecorde | !define IsStarterEdition `${SM_STARTER} WinVer_SysMetricCheck ""` |
463 | 2961 | mdecorde | !define OSHasMediaCenter `${SM_MEDIACENTER} WinVer_SysMetricCheck ""` |
464 | 2961 | mdecorde | !define OSHasTabletSupport `${SM_TABLETPC} WinVer_SysMetricCheck ""` |
465 | 2961 | mdecorde | |
466 | 2961 | mdecorde | # version retrieval macros |
467 | 2961 | mdecorde | |
468 | 2961 | mdecorde | !macro __WinVer_GetVer var rshift mask outvar |
469 | 2961 | mdecorde | ${CallArtificialFunction} __WinVer_InitVars |
470 | 2961 | mdecorde | !if "${mask}" != "" |
471 | 2961 | mdecorde | IntOp ${outvar} ${var} & ${mask} |
472 | 2961 | mdecorde | !if "${rshift}" != "" |
473 | 2961 | mdecorde | IntOp ${outvar} ${outvar} >> ${rshift} |
474 | 2961 | mdecorde | !endif |
475 | 2961 | mdecorde | !else |
476 | 2961 | mdecorde | IntOp ${outvar} ${var} >> ${rshift} |
477 | 2961 | mdecorde | !endif |
478 | 2961 | mdecorde | !macroend |
479 | 2961 | mdecorde | |
480 | 2961 | mdecorde | !define WinVerGetMajor '!insertmacro __WinVer_GetVer $__WINVERV 24 ${_WINVER_MASKVMAJ}' |
481 | 2961 | mdecorde | !define WinVerGetMinor '!insertmacro __WinVer_GetVer $__WINVERV 16 ${_WINVER_MASKVMIN}' |
482 | 2961 | mdecorde | !define WinVerGetBuild '!insertmacro __WinVer_GetVer $__WINVERSP "" ${_WINVER_MASKVBLD}' |
483 | 2961 | mdecorde | |
484 | 2961 | mdecorde | # done |
485 | 2961 | mdecorde | |
486 | 2961 | mdecorde | !endif # !___WINVER__NSH___ |
487 | 2961 | mdecorde | |
488 | 2961 | mdecorde | !verbose pop |