Statistiques
| Révision :

root / tmp / org.txm.setups / nsis-2.5 / Include / MultiUser.nsh @ 3101

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