root / tmp / org.txm.setups / nsis / Include / MultiUser.nsh @ 1105
Historique | Voir | Annoter | Télécharger (13,04 ko)
1 |
/* |
---|---|
2 |
|
3 |
MultiUser.nsh |
4 |
|
5 |
Installer configuration for multi-user Windows environments |
6 |
|
7 |
Copyright 2008-2015 Joost Verburg |
8 |
|
9 |
*/ |
10 |
|
11 |
!ifndef MULTIUSER_INCLUDED |
12 |
!define MULTIUSER_INCLUDED |
13 |
!verbose push |
14 |
!verbose 3 |
15 |
|
16 |
;Standard NSIS header files |
17 |
|
18 |
!ifdef MULTIUSER_MUI |
19 |
!include MUI2.nsh |
20 |
!endif |
21 |
!include nsDialogs.nsh |
22 |
!include LogicLib.nsh |
23 |
!include WinVer.nsh |
24 |
!include FileFunc.nsh |
25 |
|
26 |
;Variables |
27 |
|
28 |
Var MultiUser.Privileges |
29 |
Var MultiUser.InstallMode |
30 |
|
31 |
;Command line installation mode setting |
32 |
|
33 |
!ifdef MULTIUSER_INSTALLMODE_COMMANDLINE |
34 |
!include StrFunc.nsh |
35 |
!ifndef StrStr_INCLUDED |
36 |
${StrStr} |
37 |
!endif |
38 |
!ifndef MULTIUSER_NOUNINSTALL |
39 |
!ifndef UnStrStr_INCLUDED |
40 |
${UnStrStr} |
41 |
!endif |
42 |
!endif |
43 |
|
44 |
Var MultiUser.Parameters |
45 |
Var MultiUser.Result |
46 |
!endif |
47 |
|
48 |
;Installation folder stored in registry |
49 |
|
50 |
!ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME |
51 |
Var MultiUser.InstDir |
52 |
!endif |
53 |
|
54 |
!ifdef MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY & MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME |
55 |
Var MultiUser.DefaultKeyValue |
56 |
!endif |
57 |
|
58 |
;Windows Vista UAC setting |
59 |
|
60 |
!if "${MULTIUSER_EXECUTIONLEVEL}" == Admin |
61 |
RequestExecutionLevel admin |
62 |
!define MULTIUSER_EXECUTIONLEVEL_ALLUSERS |
63 |
!else if "${MULTIUSER_EXECUTIONLEVEL}" == Power |
64 |
RequestExecutionLevel admin |
65 |
!define MULTIUSER_EXECUTIONLEVEL_ALLUSERS |
66 |
!else if "${MULTIUSER_EXECUTIONLEVEL}" == Highest |
67 |
RequestExecutionLevel highest |
68 |
!define MULTIUSER_EXECUTIONLEVEL_ALLUSERS |
69 |
!else |
70 |
RequestExecutionLevel user |
71 |
!endif |
72 |
|
73 |
/* |
74 |
|
75 |
Install modes |
76 |
|
77 |
*/ |
78 |
|
79 |
!macro MULTIUSER_INSTALLMODE_ALLUSERS UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX |
80 |
|
81 |
;Install mode initialization - per-machine |
82 |
|
83 |
${ifnot} ${IsNT} |
84 |
${orif} $MultiUser.Privileges == "Admin" |
85 |
${orif} $MultiUser.Privileges == "Power" |
86 |
|
87 |
StrCpy $MultiUser.InstallMode AllUsers |
88 |
|
89 |
SetShellVarContext all |
90 |
|
91 |
!if "${UNINSTALLER_PREFIX}" != UN |
92 |
;Set default installation location for installer |
93 |
!ifdef MULTIUSER_INSTALLMODE_INSTDIR |
94 |
StrCpy $INSTDIR "$PROGRAMFILES\${MULTIUSER_INSTALLMODE_INSTDIR}" |
95 |
!endif |
96 |
!endif |
97 |
|
98 |
!ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME |
99 |
|
100 |
ReadRegStr $MultiUser.InstDir HKLM "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME}" |
101 |
|
102 |
${if} $MultiUser.InstDir != "" |
103 |
StrCpy $INSTDIR $MultiUser.InstDir |
104 |
${endif} |
105 |
|
106 |
!endif |
107 |
|
108 |
!ifdef MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION |
109 |
Call "${MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION}" |
110 |
!endif |
111 |
|
112 |
${endif} |
113 |
|
114 |
!macroend |
115 |
|
116 |
!macro MULTIUSER_INSTALLMODE_CURRENTUSER UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX |
117 |
|
118 |
;Install mode initialization - per-user |
119 |
|
120 |
${if} ${IsNT} |
121 |
|
122 |
StrCpy $MultiUser.InstallMode CurrentUser |
123 |
|
124 |
SetShellVarContext current |
125 |
|
126 |
!if "${UNINSTALLER_PREFIX}" != UN |
127 |
;Set default installation location for installer |
128 |
!ifdef MULTIUSER_INSTALLMODE_INSTDIR |
129 |
${if} ${AtLeastWin2000} |
130 |
StrCpy $INSTDIR "$LOCALAPPDATA\${MULTIUSER_INSTALLMODE_INSTDIR}" |
131 |
${else} |
132 |
StrCpy $INSTDIR "$PROGRAMFILES\${MULTIUSER_INSTALLMODE_INSTDIR}" |
133 |
${endif} |
134 |
!endif |
135 |
!endif |
136 |
|
137 |
!ifdef MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY & MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME |
138 |
|
139 |
ReadRegStr $MultiUser.InstDir HKCU "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME}" |
140 |
|
141 |
${if} $MultiUser.InstDir != "" |
142 |
StrCpy $INSTDIR $MultiUser.InstDir |
143 |
${endif} |
144 |
|
145 |
!endif |
146 |
|
147 |
!ifdef MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION |
148 |
Call "${MULTIUSER_INSTALLMODE_${UNINSTALLER_PREFIX}FUNCTION}" |
149 |
!endif |
150 |
|
151 |
${endif} |
152 |
|
153 |
!macroend |
154 |
|
155 |
Function MultiUser.InstallMode.AllUsers |
156 |
!insertmacro MULTIUSER_INSTALLMODE_ALLUSERS "" "" |
157 |
FunctionEnd |
158 |
|
159 |
Function MultiUser.InstallMode.CurrentUser |
160 |
!insertmacro MULTIUSER_INSTALLMODE_CURRENTUSER "" "" |
161 |
FunctionEnd |
162 |
|
163 |
!ifndef MULTIUSER_NOUNINSTALL |
164 |
|
165 |
Function un.MultiUser.InstallMode.AllUsers |
166 |
!insertmacro MULTIUSER_INSTALLMODE_ALLUSERS UN .un |
167 |
FunctionEnd |
168 |
|
169 |
Function un.MultiUser.InstallMode.CurrentUser |
170 |
!insertmacro MULTIUSER_INSTALLMODE_CURRENTUSER UN .un |
171 |
FunctionEnd |
172 |
|
173 |
!endif |
174 |
|
175 |
/* |
176 |
|
177 |
Installer/uninstaller initialization |
178 |
|
179 |
*/ |
180 |
|
181 |
!macro MULTIUSER_INIT_QUIT UNINSTALLER_FUNCPREFIX |
182 |
|
183 |
!ifdef MULTIUSER_INIT_${UNINSTALLER_FUNCPREFIX}FUNCTIONQUIT |
184 |
Call "${MULTIUSER_INIT_${UNINSTALLER_FUNCPREFIX}FUCTIONQUIT} |
185 |
!else |
186 |
Quit |
187 |
!endif |
188 |
|
189 |
!macroend |
190 |
|
191 |
!macro MULTIUSER_INIT_TEXTS |
192 |
|
193 |
!ifndef MULTIUSER_INIT_TEXT_ADMINREQUIRED |
194 |
!define MULTIUSER_INIT_TEXT_ADMINREQUIRED "$(^Caption) requires administrator priviledges." |
195 |
!endif |
196 |
|
197 |
!ifndef MULTIUSER_INIT_TEXT_POWERREQUIRED |
198 |
!define MULTIUSER_INIT_TEXT_POWERREQUIRED "$(^Caption) requires at least Power User priviledges." |
199 |
!endif |
200 |
|
201 |
!ifndef MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE |
202 |
!define MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE "Your user account does not have sufficient privileges to install $(^Name) for all users of this compuetr." |
203 |
!endif |
204 |
|
205 |
!macroend |
206 |
|
207 |
!macro MULTIUSER_INIT_CHECKS UNINSTALLER_PREFIX UNINSTALLER_FUNCPREFIX |
208 |
|
209 |
;Installer initialization - check privileges and set install mode |
210 |
|
211 |
!insertmacro MULTIUSER_INIT_TEXTS |
212 |
|
213 |
UserInfo::GetAccountType |
214 |
Pop $MultiUser.Privileges |
215 |
|
216 |
${if} ${IsNT} |
217 |
|
218 |
;Check privileges |
219 |
|
220 |
!if "${MULTIUSER_EXECUTIONLEVEL}" == Admin |
221 |
|
222 |
${if} $MultiUser.Privileges != "Admin" |
223 |
MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_ADMINREQUIRED}" |
224 |
!insertmacro MULTIUSER_INIT_QUIT "${UNINSTALLER_FUNCPREFIX}" |
225 |
${endif} |
226 |
|
227 |
!else if "${MULTIUSER_EXECUTIONLEVEL}" == Power |
228 |
|
229 |
${if} $MultiUser.Privileges != "Power" |
230 |
${andif} $MultiUser.Privileges != "Admin" |
231 |
${if} ${AtMostWinXP} |
232 |
MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_POWERREQUIRED}" |
233 |
${else} |
234 |
MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_ADMINREQUIRED}" |
235 |
${endif} |
236 |
!insertmacro MULTIUSER_INIT_QUIT "${UNINSTALLER_FUNCPREFIX}" |
237 |
${endif} |
238 |
|
239 |
!endif |
240 |
|
241 |
!ifdef MULTIUSER_EXECUTIONLEVEL_ALLUSERS |
242 |
|
243 |
;Default to per-machine installation if possible |
244 |
|
245 |
${if} $MultiUser.Privileges == "Admin" |
246 |
${orif} $MultiUser.Privileges == "Power" |
247 |
!ifndef MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER |
248 |
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers |
249 |
!else |
250 |
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser |
251 |
!endif |
252 |
|
253 |
!ifdef MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY & MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME |
254 |
|
255 |
;Set installation mode to setting from a previous installation |
256 |
|
257 |
!ifndef MULTIUSER_INSTALLMODE_DEFAULT_CURRENTUSER |
258 |
ReadRegStr $MultiUser.DefaultKeyValue HKLM "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}" |
259 |
${if} $MultiUser.DefaultKeyValue == "" |
260 |
ReadRegStr $MultiUser.DefaultKeyValue HKCU "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}" |
261 |
${if} $MultiUser.DefaultKeyValue != "" |
262 |
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser |
263 |
${endif} |
264 |
${endif} |
265 |
!else |
266 |
ReadRegStr $MultiUser.DefaultKeyValue HKCU "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}" |
267 |
${if} $MultiUser.DefaultKeyValue == "" |
268 |
ReadRegStr $MultiUser.DefaultKeyValue HKLM "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY}" "${MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME}" |
269 |
${if} $MultiUser.DefaultKeyValue != "" |
270 |
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers |
271 |
${endif} |
272 |
${endif} |
273 |
!endif |
274 |
|
275 |
!endif |
276 |
|
277 |
${else} |
278 |
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser |
279 |
${endif} |
280 |
|
281 |
!else |
282 |
|
283 |
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser |
284 |
|
285 |
!endif |
286 |
|
287 |
!ifdef MULTIUSER_INSTALLMODE_COMMANDLINE |
288 |
|
289 |
;Check for install mode setting on command line |
290 |
|
291 |
${${UNINSTALLER_FUNCPREFIX}GetParameters} $MultiUser.Parameters |
292 |
|
293 |
${${UNINSTALLER_PREFIX}StrStr} $MultiUser.Result $MultiUser.Parameters "/CurrentUser" |
294 |
|
295 |
${if} $MultiUser.Result != "" |
296 |
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.CurrentUser |
297 |
${endif} |
298 |
|
299 |
${${UNINSTALLER_PREFIX}StrStr} $MultiUser.Result $MultiUser.Parameters "/AllUsers" |
300 |
|
301 |
${if} $MultiUser.Result != "" |
302 |
${if} $MultiUser.Privileges == "Admin" |
303 |
${orif} $MultiUser.Privileges == "Power" |
304 |
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers |
305 |
${else} |
306 |
MessageBox MB_OK|MB_ICONSTOP "${MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE}" |
307 |
${endif} |
308 |
${endif} |
309 |
|
310 |
!endif |
311 |
|
312 |
${else} |
313 |
|
314 |
;Not running Windows NT, per-user installation not supported |
315 |
|
316 |
Call ${UNINSTALLER_FUNCPREFIX}MultiUser.InstallMode.AllUsers |
317 |
|
318 |
${endif} |
319 |
|
320 |
!macroend |
321 |
|
322 |
!macro MULTIUSER_INIT |
323 |
!verbose push |
324 |
!verbose 3 |
325 |
|
326 |
!insertmacro MULTIUSER_INIT_CHECKS "" "" |
327 |
|
328 |
!verbose pop |
329 |
!macroend |
330 |
|
331 |
!ifndef MULTIUSER_NOUNINSTALL |
332 |
|
333 |
!macro MULTIUSER_UNINIT |
334 |
!verbose push |
335 |
!verbose 3 |
336 |
|
337 |
!insertmacro MULTIUSER_INIT_CHECKS Un un. |
338 |
|
339 |
!verbose pop |
340 |
!macroend |
341 |
|
342 |
!endif |
343 |
|
344 |
/* |
345 |
|
346 |
Modern UI 2 page |
347 |
|
348 |
*/ |
349 |
|
350 |
!ifdef MULTIUSER_MUI |
351 |
|
352 |
!macro MULTIUSER_INSTALLMODEPAGE_INTERFACE |
353 |
|
354 |
!ifndef MULTIUSER_INSTALLMODEPAGE_INTERFACE |
355 |
!define MULTIUSER_INSTALLMODEPAGE_INTERFACE |
356 |
Var MultiUser.InstallModePage |
357 |
|
358 |
Var MultiUser.InstallModePage.Text |
359 |
|
360 |
Var MultiUser.InstallModePage.AllUsers |
361 |
Var MultiUser.InstallModePage.CurrentUser |
362 |
|
363 |
Var MultiUser.InstallModePage.ReturnValue |
364 |
!endif |
365 |
|
366 |
!macroend |
367 |
|
368 |
!macro MULTIUSER_PAGEDECLARATION_INSTALLMODE |
369 |
|
370 |
!insertmacro MUI_SET MULTIUSER_${MUI_PAGE_UNINSTALLER_PREFIX}INSTALLMODEPAGE "" |
371 |
!insertmacro MULTIUSER_INSTALLMODEPAGE_INTERFACE |
372 |
|
373 |
!insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_TOP "$(MULTIUSER_INNERTEXT_INSTALLMODE_TOP)" |
374 |
!insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS "$(MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS)" |
375 |
!insertmacro MUI_DEFAULT MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER "$(MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER)" |
376 |
|
377 |
PageEx custom |
378 |
|
379 |
PageCallbacks MultiUser.InstallModePre_${MUI_UNIQUEID} MultiUser.InstallModeLeave_${MUI_UNIQUEID} |
380 |
|
381 |
Caption " " |
382 |
|
383 |
PageExEnd |
384 |
|
385 |
!insertmacro MULTIUSER_FUNCTION_INSTALLMODEPAGE MultiUser.InstallModePre_${MUI_UNIQUEID} MultiUser.InstallModeLeave_${MUI_UNIQUEID} |
386 |
|
387 |
!undef MULTIUSER_INSTALLMODEPAGE_TEXT_TOP |
388 |
!undef MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS |
389 |
!undef MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER |
390 |
|
391 |
!macroend |
392 |
|
393 |
!macro MULTIUSER_PAGE_INSTALLMODE |
394 |
|
395 |
;Modern UI page for install mode |
396 |
|
397 |
!verbose push |
398 |
!verbose 3 |
399 |
|
400 |
!ifndef MULTIUSER_EXECUTIONLEVEL_ALLUSERS |
401 |
!error "A mixed-mode installation requires MULTIUSER_EXECUTIONLEVEL to be set to Admin, Power or Highest." |
402 |
!endif |
403 |
|
404 |
!insertmacro MUI_PAGE_INIT |
405 |
!insertmacro MULTIUSER_PAGEDECLARATION_INSTALLMODE |
406 |
|
407 |
!verbose pop |
408 |
|
409 |
!macroend |
410 |
|
411 |
!macro MULTIUSER_FUNCTION_INSTALLMODEPAGE PRE LEAVE |
412 |
|
413 |
;Page functions of Modern UI page |
414 |
|
415 |
Function "${PRE}" |
416 |
|
417 |
${ifnot} ${IsNT} |
418 |
Abort |
419 |
${endif} |
420 |
|
421 |
${if} $MultiUser.Privileges != "Power" |
422 |
${andif} $MultiUser.Privileges != "Admin" |
423 |
Abort |
424 |
${endif} |
425 |
|
426 |
!insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE |
427 |
!insertmacro MUI_HEADER_TEXT_PAGE $(MULTIUSER_TEXT_INSTALLMODE_TITLE) $(MULTIUSER_TEXT_INSTALLMODE_SUBTITLE) |
428 |
|
429 |
nsDialogs::Create 1018 |
430 |
Pop $MultiUser.InstallModePage |
431 |
|
432 |
${NSD_CreateLabel} 0u 0u 300u 20u "${MULTIUSER_INSTALLMODEPAGE_TEXT_TOP}" |
433 |
Pop $MultiUser.InstallModePage.Text |
434 |
|
435 |
${NSD_CreateRadioButton} 20u 50u 280u 10u "${MULTIUSER_INSTALLMODEPAGE_TEXT_ALLUSERS}" |
436 |
Pop $MultiUser.InstallModePage.AllUsers |
437 |
|
438 |
${NSD_CreateRadioButton} 20u 70u 280u 10u "${MULTIUSER_INSTALLMODEPAGE_TEXT_CURRENTUSER}" |
439 |
Pop $MultiUser.InstallModePage.CurrentUser |
440 |
|
441 |
${if} $MultiUser.InstallMode == "AllUsers" |
442 |
SendMessage $MultiUser.InstallModePage.AllUsers ${BM_SETCHECK} ${BST_CHECKED} 0 |
443 |
${else} |
444 |
SendMessage $MultiUser.InstallModePage.CurrentUser ${BM_SETCHECK} ${BST_CHECKED} 0 |
445 |
${endif} |
446 |
|
447 |
!insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW |
448 |
nsDialogs::Show |
449 |
|
450 |
FunctionEnd |
451 |
|
452 |
Function "${LEAVE}" |
453 |
SendMessage $MultiUser.InstallModePage.AllUsers ${BM_GETCHECK} 0 0 $MultiUser.InstallModePage.ReturnValue |
454 |
|
455 |
${if} $MultiUser.InstallModePage.ReturnValue = ${BST_CHECKED} |
456 |
Call MultiUser.InstallMode.AllUsers |
457 |
${else} |
458 |
Call MultiUser.InstallMode.CurrentUser |
459 |
${endif} |
460 |
|
461 |
!insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE |
462 |
FunctionEnd |
463 |
|
464 |
!macroend |
465 |
|
466 |
!endif |
467 |
|
468 |
!verbose pop |
469 |
!endif |