VirtualBox

source: vbox/trunk/src/VBox/Additions/WINNT/Installer/VBoxGuestAdditions.nsi@ 44459

Last change on this file since 44459 was 44459, checked in by vboxsync, 12 years ago

Windows Guest Additions installer: Invoke external calls via own function to also log stdout/stderr output into installer log files.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 41.3 KB
Line 
1; $Id: VBoxGuestAdditions.nsi 44459 2013-01-30 11:23:57Z vboxsync $
2; @file
3; VBoxGuestAdditions.nsi - Main file for Windows Guest Additions installation.
4;
5
6;
7; Copyright (C) 2012-2013 Oracle Corporation
8;
9; This file is part of VirtualBox Open Source Edition (OSE), as
10; available from http://www.virtualbox.org. This file is free software;
11; you can redistribute it and/or modify it under the terms of the GNU
12; General Public License (GPL) as published by the Free Software
13; Foundation, in version 2 as it comes in the "COPYING" file of the
14; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16;
17
18!if $%BUILD_TYPE% == "debug"
19 !define _DEBUG ; Turn this on to get extra output
20!endif
21
22!ifdef _DEBUG
23 ; Scratch directory for plugin tests
24 !addincludedir .\PluginTest
25 !addplugindir .\PluginTest
26!endif
27
28; Defines for special functions
29!define WHQL_FAKE ; Enables faking of non WHQL signed / approved drivers
30 ; Needs the VBoxWHQLFake.exe in the additions output directory!
31!define WFP_FILE_EXCEPTION ; Enables setting a temporary file exception for WFP proctected files
32
33!define VENDOR_ROOT_KEY "SOFTWARE\$%VBOX_VENDOR_SHORT%"
34
35; Product defines
36!define PRODUCT_NAME "$%VBOX_PRODUCT% Guest Additions"
37!define PRODUCT_DESC "$%VBOX_PRODUCT% Guest Additions"
38!define PRODUCT_VERSION "$%VBOX_VERSION_MAJOR%.$%VBOX_VERSION_MINOR%.$%VBOX_VERSION_BUILD%.0"
39!define PRODUCT_PUBLISHER "$%VBOX_VENDOR%"
40!define PRODUCT_COPYRIGHT "(C) $%VBOX_C_YEAR% $%VBOX_VENDOR%"
41!define PRODUCT_OUTPUT "VBoxWindowsAdditions-$%BUILD_TARGET_ARCH%.exe"
42!define PRODUCT_WEB_SITE "http://www.virtualbox.org"
43!define PRODUCT_INSTALL_KEY "${VENDOR_ROOT_KEY}\VirtualBox Guest Additions"
44!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
45!define PRODUCT_UNINST_ROOT_KEY "HKLM"
46
47!define LICENSE_FILE_RTF "license.rtf"
48
49; Needed for InstallLib macro: Install libraries in every case
50!define LIBRARY_IGNORE_VERSION
51
52VIProductVersion "${PRODUCT_VERSION}"
53VIAddVersionKey "FileVersion" "$%VBOX_VERSION_STRING%"
54VIAddVersionKey "ProductName" "${PRODUCT_NAME}"
55VIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}"
56VIAddVersionKey "CompanyName" "${PRODUCT_PUBLISHER}"
57VIAddVersionKey "FileDescription" "${PRODUCT_DESC}"
58VIAddVersionKey "LegalCopyright" "${PRODUCT_COPYRIGHT}"
59VIAddVersionKey "InternalName" "${PRODUCT_OUTPUT}"
60
61; This registry key will hold the mouse driver path before install (NT4 only)
62!define ORG_MOUSE_PATH "MousePath"
63
64; If we have our guest install helper DLL, add the
65; plugin path so that NSIS can find it when compiling the installer
66; Note: NSIS plugins *always* have to be compiled in 32-bit!
67!if $%VBOX_WITH_GUEST_INSTALL_HELPER% == "1"
68 !addplugindir "$%PATH_TARGET_X86%\VBoxGuestInstallHelper"
69!endif
70
71!include "LogicLib.nsh"
72!include "FileFunc.nsh"
73 !insertmacro GetParameters
74 !insertmacro GetOptions
75!include "WordFunc.nsh"
76 !insertmacro WordFind
77 !insertmacro StrFilter
78
79!include "nsProcess.nsh"
80!include "Library.nsh"
81!include "Sections.nsh"
82!include "strstr.nsh" ; Function "strstr"
83!include "servicepack.nsh" ; Function "GetServicePack"
84!include "winver.nsh" ; Function for determining Windows version
85!define REPLACEDLL_NOREGISTER ; Replace in use DLL function
86!include "ReplaceDLL.nsh"
87!include "dumplog.nsh" ; Dump log to file function
88
89!if $%BUILD_TARGET_ARCH% == "amd64"
90 !include "x64.nsh"
91!endif
92
93; Set Modern UI (MUI) as default
94!define USE_MUI
95
96!ifdef USE_MUI
97 ; Use modern UI, version 2
98 !include "MUI2.nsh"
99
100 ; MUI Settings
101 !define MUI_WELCOMEFINISHPAGE_BITMAP "$%VBOX_BRAND_WIN_ADD_INST_DLGBMP%"
102 !define MUI_ABORTWARNING
103 !define MUI_WELCOMEPAGE_TITLE_3LINES "Welcome to the ${PRODUCT_NAME} Additions Setup"
104
105 ; API defines
106 !define SM_CLEANBOOT 67
107
108 ; Icons
109 !if $%BUILD_TARGET_ARCH% == "x86" ; 32-bit
110 !define MUI_ICON "$%VBOX_NSIS_ICON_FILE%"
111 !define MUI_UNICON "$%VBOX_NSIS_ICON_FILE%"
112 !else ; 64-bit
113 !define MUI_ICON "$%VBOX_WINDOWS_ADDITIONS_ICON_FILE%"
114 !define MUI_UNICON "$%VBOX_WINDOWS_ADDITIONS_ICON_FILE%"
115 !endif
116
117 ; Welcome page
118 !insertmacro MUI_PAGE_WELCOME
119!ifdef VBOX_WITH_LICENSE_DISPLAY
120 ; License page
121 !insertmacro MUI_PAGE_LICENSE "$(VBOX_LICENSE)"
122 !define MUI_LICENSEPAGE_RADIOBUTTONS
123!endif
124 ; Directory page
125 !insertmacro MUI_PAGE_DIRECTORY
126 ; Components Page
127 !insertmacro MUI_PAGE_COMPONENTS
128 ; Instfiles page
129 !insertmacro MUI_PAGE_INSTFILES
130
131 !ifndef _DEBUG
132 !define MUI_FINISHPAGE_TITLE_3LINES ; Have a bit more vertical space for text
133 !insertmacro MUI_PAGE_FINISH ; Only show in release mode - useful information for debugging!
134 !endif
135
136 ; Uninstaller pages
137 !insertmacro MUI_UNPAGE_INSTFILES
138
139 ; Define languages we will use
140 !insertmacro MUI_LANGUAGE "English"
141 !insertmacro MUI_LANGUAGE "French"
142 !insertmacro MUI_LANGUAGE "German"
143
144 ; Set branding text which appears on the horizontal line at the bottom
145!ifdef _DEBUG
146 BrandingText "VirtualBox Windows Additions $%VBOX_VERSION_STRING% (r$%VBOX_SVN_REV%) - Debug Build"
147!else
148 BrandingText "VirtualBox Windows Additions $%VBOX_VERSION_STRING%"
149!endif
150
151!ifdef VBOX_WITH_LICENSE_DISPLAY
152 ; Set license language
153 LicenseLangString VBOX_LICENSE ${LANG_ENGLISH} "$%VBOX_BRAND_LICENSE_RTF%"
154
155 ; If license files not available (OSE / PUEL) build, then use the English one as default
156 !ifdef VBOX_BRAND_fr_FR_LICENSE_RTF
157 LicenseLangString VBOX_LICENSE ${LANG_FRENCH} "$%VBOX_BRAND_fr_FR_LICENSE_RTF%"
158 !else
159 LicenseLangString VBOX_LICENSE ${LANG_FRENCH} "$%VBOX_BRAND_LICENSE_RTF%"
160 !endif
161 !ifdef VBOX_BRAND_de_DE_LICENSE_RTF
162 LicenseLangString VBOX_LICENSE ${LANG_GERMAN} "$%VBOX_BRAND_de_DE_LICENSE_RTF%"
163 !else
164 LicenseLangString VBOX_LICENSE ${LANG_GERMAN} "$%VBOX_BRAND_LICENSE_RTF%"
165 !endif
166!endif
167
168 !insertmacro MUI_RESERVEFILE_LANGDLL
169!else ; !USE_MUI
170 XPStyle on
171!ifdef VBOX_WITH_LICENSE_DISPLAY
172 Page license
173!endif
174 Page components
175 Page directory
176 Page instfiles
177!endif
178
179; Language files
180!include "Languages\English.nsh"
181!include "Languages\French.nsh"
182!include "Languages\German.nsh"
183
184; Variables and output files
185Name "${PRODUCT_NAME} $%VBOX_VERSION_STRING%"
186!ifdef UNINSTALLER_ONLY
187 !echo "Uninstaller only!"
188 OutFile "$%PATH_TARGET%\VBoxWindowsAdditions-$%BUILD_TARGET_ARCH%-uninst.exe"
189!else
190 OutFile "VBoxWindowsAdditions-$%BUILD_TARGET_ARCH%.exe"
191!endif ; UNINSTALLER_ONLY
192
193; Define default installation directory
194!if $%BUILD_TARGET_ARCH% == "x86" ; 32-bit
195 InstallDir "$PROGRAMFILES32\$%VBOX_VENDOR_SHORT%\VirtualBox Guest Additions"
196!else ; 64-bit
197 InstallDir "$PROGRAMFILES64\$%VBOX_VENDOR_SHORT%\VirtualBox Guest Additions"
198!endif
199
200InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
201ShowInstDetails show
202ShowUnInstDetails show
203RequestExecutionLevel highest
204
205; Internal parameters
206Var g_iSystemMode ; Current system mode (0 = Normal boot, 1 = Fail-safe boot, 2 = Fail-safe with network boot)
207Var g_strSystemDir ; Windows system directory
208Var g_strSysWow64 ; The SysWow64 directory on 64-bit systems
209Var g_strCurUser ; Current user using the system
210Var g_strAddVerMaj ; Installed Guest Additions: Major version
211Var g_strAddVerMin ; Installed Guest Additions: Minor version
212Var g_strAddVerBuild ; Installed Guest Additions: Build number
213Var g_strAddVerRev ; Installed Guest Additions: SVN revision
214Var g_strWinVersion ; Current Windows version we're running on
215Var g_bLogEnable ; Do logging when installing? "true" or "false"
216Var g_bWithWDDM ; Install the WDDM driver instead of the XPDM one
217Var g_bCapDllCache ; Capability: Does the (Windows) guest have have a DLL cache which needs to be taken care of?
218Var g_bCapWDDM ; Capability: Is the guest able to handle/use our WDDM driver?
219
220; Command line parameters - these can be set/modified
221; on the command line
222Var g_bFakeWHQL ; Cmd line: Fake Windows to install non WHQL certificated drivers (only for W2K and XP currently!!) ("/unsig_drv")
223Var g_bForceInstall ; Cmd line: Force installation on unknown Windows OS version
224Var g_bUninstall ; Cmd line: Just uninstall any previous Guest Additions and exit
225Var g_bRebootOnExit ; Cmd line: Auto-Reboot on successful installation. Good for unattended installations ("/reboot")
226Var g_iScreenBpp ; Cmd line: Screen depth ("/depth=X")
227Var g_iScreenX ; Cmd line: Screen resolution X ("/resx=X")
228Var g_iScreenY ; Cmd line: Screen resolution Y ("/resy=Y")
229Var g_iSfOrder ; Cmd line: Order of Shared Folders network provider (0=first, 1=second, ...)
230Var g_bIgnoreUnknownOpts ; Cmd line: Ignore unknown options (don't display the help)
231Var g_bNoVBoxServiceExit ; Cmd line: Do not quit VBoxService before updating - install on next reboot
232Var g_bNoVBoxTrayExit ; Cmd line: Do not quit VBoxTray before updating - install on next reboot
233Var g_bNoVideoDrv ; Cmd line: Do not install the VBoxVideo driver
234Var g_bNoGuestDrv ; Cmd line: Do not install the VBoxGuest driver
235Var g_bNoMouseDrv ; Cmd line: Do not install the VBoxMouse driver
236Var g_bWithAutoLogon ; Cmd line: Install VBoxGINA / VBoxCredProv for auto logon support
237Var g_bWithD3D ; Cmd line: Install Direct3D support
238Var g_bOnlyExtract ; Cmd line: Only extract all files, do *not* install them. Only valid with param "/D" (target directory)
239Var g_bPostInstallStatus ; Cmd line: Post the overall installation status to some external program (VBoxTray)
240
241; Platform parts of this installer
242!include "VBoxGuestAdditionsLog.nsh"
243!include "VBoxGuestAdditionsExternal.nsh"
244!include "VBoxGuestAdditionsCommon.nsh"
245!if $%BUILD_TARGET_ARCH% == "x86" ; 32-bit only
246 !include "VBoxGuestAdditionsNT4.nsh"
247!endif
248!include "VBoxGuestAdditionsW2KXP.nsh"
249!include "VBoxGuestAdditionsVista.nsh"
250!include "VBoxGuestAdditionsUninstall.nsh" ; Product uninstallation
251!include "VBoxGuestAdditionsUninstallOld.nsh" ; Uninstallation of deprecated versions which must be removed first
252
253Function HandleCommandLine
254
255 Push $0 ; Command line (without process name)
256 Push $1 ; Number of parameters
257 Push $2 ; Current parameter index
258 Push $3 ; Current parameter pair (name=value)
259 Push $4 ; Current parameter name
260 Push $5 ; Current parameter value (if present)
261
262 StrCpy $1 "0" ; Init param counter
263 StrCpy $2 "1" ; Init current param counter
264
265 ${GetParameters} $0 ; Extract command line
266 ${If} $0 == "" ; If no parameters at all exit
267 Goto exit
268 ${EndIf}
269
270 ; Enable for debugging
271 ;MessageBox MB_OK "CmdLine: $0"
272
273 ${WordFind} $0 " " "#" $1 ; Get number of parameters in cmd line
274 ${If} $0 == $1 ; If result matches the input then
275 StrCpy $1 "1" ; no delimiter was found. Correct to 1 word total
276 ${EndIf}
277
278 ${While} $2 <= $1 ; Loop through all params
279
280 ${WordFind} $0 " " "+$2" $3 ; Get current name=value pair
281 ${WordFind} $3 "=" "+1" $4 ; Get current param name
282 ${WordFind} $3 "=" "+2" $5 ; Get current param value
283
284 ${StrFilter} $4 "-" "" "" $4 ; Transfer param name to lowercase
285
286 ; Enable for debugging
287 ;MessageBox MB_OK "#$2 of #$1, param='$3', name=$4, val=$5"
288
289 ${Switch} $4
290
291 ${Case} '/d' ; NSIS: /D=<instdir> switch, skip
292 ${Break}
293
294 ${Case} '/depth'
295 ${Case} 'depth'
296 StrCpy $g_iScreenBpp $5
297 ${Break}
298
299 ${Case} '/extract'
300 StrCpy $g_bOnlyExtract "true"
301 ${Break}
302
303 ${Case} '/force'
304 StrCpy $g_bForceInstall "true"
305 ${Break}
306
307 ${Case} '/help'
308 ${Case} '/H'
309 ${Case} '/h'
310 ${Case} '/?'
311 Goto usage
312 ${Break}
313
314 ${Case} '/ignore_unknownopts' ; Not officially documented
315 StrCpy $g_bIgnoreUnknownOpts "true"
316 ${Break}
317
318 ${Case} '/l'
319 ${Case} '/log'
320 ${Case} '/logging'
321 StrCpy $g_bLogEnable "true"
322 ${Break}
323
324 ${Case} '/ncrc' ; NSIS: /NCRC switch, skip
325 ${Break}
326
327 ${Case} '/no_vboxservice_exit' ; Not officially documented
328 StrCpy $g_bNoVBoxServiceExit "true"
329 ${Break}
330
331 ${Case} '/no_vboxtray_exit' ; Not officially documented
332 StrCpy $g_bNoVBoxTrayExit "true"
333 ${Break}
334
335 ${Case} '/no_videodrv' ; Not officially documented
336 StrCpy $g_bNoVideoDrv "true"
337 ${Break}
338
339 ${Case} '/no_guestdrv' ; Not officially documented
340 StrCpy $g_bNoGuestDrv "true"
341 ${Break}
342
343 ${Case} '/no_mousedrv' ; Not officially documented
344 StrCpy $g_bNoMouseDrv "true"
345 ${Break}
346
347!if $%VBOX_WITH_GUEST_INSTALL_HELPER% == "1"
348 ; This switch tells our installer that it
349 ; - should not quit VBoxTray during the update, because ...
350 ; - ... it should show the overall installation status
351 ; using VBoxTray's balloon message feature (since VBox 4.0)
352 ${Case} '/post_installstatus' ; Not officially documented
353 StrCpy $g_bNoVBoxTrayExit "true"
354 StrCpy $g_bPostInstallStatus "true"
355 ${Break}
356!endif
357
358 ${Case} '/reboot'
359 StrCpy $g_bRebootOnExit "true"
360 ${Break}
361
362 ${Case} '/s' ; NSIS: /S switch, skip
363 ${Break}
364
365 ${Case} '/sforder'
366 ${Case} 'sforder'
367 StrCpy $g_iSfOrder $5
368 ${Break}
369
370 !ifdef WHQL_FAKE
371 ${Case} '/unsig_drv'
372 StrCpy $g_bFakeWHQL "true"
373 ${Break}
374 !endif
375
376 ${Case} '/uninstall'
377 StrCpy $g_bUninstall "true"
378 ${Break}
379
380 ${Case} '/with_autologon'
381 StrCpy $g_bWithAutoLogon "true"
382 ${Break}
383
384 !if $%VBOX_WITH_CROGL% == "1"
385 ${Case} '/with_d3d'
386 ${Case} '/with_direct3d'
387 StrCpy $g_bWithD3D "true"
388 ${Break}
389 !endif
390
391 ${Case} '/xres'
392 ${Case} 'xres'
393 StrCpy $g_iScreenX $5
394 ${Break}
395
396 ${Case} '/yres'
397 ${Case} 'yres'
398 StrCpy $g_iScreenY $5
399 ${Break}
400
401 ${Default} ; Unknown parameter, print usage message
402 ; Prevent popping up usage message on (yet) unknown parameters
403 ; in silent mode, just skip
404 IfSilent 0 +2
405 ${Break}
406 goto usage
407 ${Break}
408
409 ${EndSwitch}
410
411next_param:
412
413 IntOp $2 $2 + 1
414
415 ${EndWhile}
416 Goto exit
417
418usage:
419
420 ; If we were told to ignore unknown (invalid) options, just return to
421 ; the parsing loop ...
422 ${If} $g_bIgnoreUnknownOpts == "true"
423 Goto next_param
424 ${EndIf}
425 MessageBox MB_OK "${PRODUCT_NAME} Installer$\r$\n$\r$\n \
426 Usage: VBoxWindowsAdditions-$%BUILD_TARGET_ARCH% [OPTIONS] [/l] [/S] [/D=<PATH>]$\r$\n$\r$\n \
427 Options:$\r$\n \
428 /depth=BPP$\tSets the guest's display color depth (bits per pixel)$\r$\n \
429 /extract$\t$\tOnly extract installation files$\r$\n \
430 /force$\t$\tForce installation on unknown/undetected Windows versions$\r$\n \
431 /uninstall$\t$\tJust uninstalls the Guest Additions and exits$\r$\n \
432 /with_autologon$\tInstalls auto-logon support$\r$\n \
433 /with_d3d$\tInstalls D3D support$\r$\n \
434 /xres=X$\t$\tSets the guest's display resolution (width in pixels)$\r$\n \
435 /yres=Y$\t$\tSets the guest's display resolution (height in pixels)$\r$\n \
436 $\r$\n \
437 Installer parameters:$\r$\n \
438 /l$\t$\tEnables logging$\r$\n \
439 /S$\t$\tSilent install$\r$\n \
440 /D=<PATH>$\tSets the default install path$\r$\n \
441 $\r$\n \
442 Note: Order of options and installer parameters are mandatory." /SD IDOK
443
444 ; No stack restore needed, we're about to quit
445 Quit
446
447done:
448
449!ifdef _DEBUG
450 ${LogVerbose} "Property: XRes: $g_iScreenX"
451 ${LogVerbose} "Property: YRes: $g_iScreenY"
452 ${LogVerbose} "Property: BPP: $g_iScreenBpp"
453 ${LogVerbose} "Property: Logging enabled: $g_bLogEnable"
454!endif
455
456exit:
457
458 Pop $5
459 Pop $4
460 Pop $3
461 Pop $2
462 Pop $1
463 Pop $0
464
465FunctionEnd
466
467Function CheckForOldGuestAdditions
468
469 Push $0
470 Push $1
471 Push $2
472
473begin:
474
475sun_check:
476
477 ; Check for old "Sun VirtualBox Guest Additions"
478 ; - before rebranding to Oracle
479 ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Sun VirtualBox Guest Additions" "UninstallString"
480 StrCmp $0 "" sun_xvm_check ; If string is empty, Sun additions are probably not installed (anymore)
481
482 MessageBox MB_YESNO $(VBOX_SUN_FOUND) /SD IDYES IDYES sun_uninstall
483 Pop $2
484 Pop $1
485 Pop $0
486 MessageBox MB_ICONSTOP $(VBOX_SUN_ABORTED) /SD IDOK
487 Quit
488
489sun_uninstall:
490
491 Call Uninstall_Sun
492 Goto success
493
494sun_xvm_check:
495
496 ; Check for old "Sun xVM VirtualBox Guest Additions"
497 ; - before getting rid of the "xVM" namespace
498 ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Sun xVM VirtualBox Guest Additions" "UninstallString"
499 StrCmp $0 "" innotek_check ; If string is empty, Sun xVM additions are probably not installed (anymore)
500
501 MessageBox MB_YESNO $(VBOX_SUN_FOUND) /SD IDYES IDYES sun_xvm_uninstall
502 Pop $2
503 Pop $1
504 Pop $0
505 MessageBox MB_ICONSTOP $(VBOX_SUN_ABORTED) /SD IDOK
506 Quit
507
508sun_xvm_uninstall:
509
510 Call Uninstall_SunXVM
511 Goto success
512
513innotek_check:
514
515 ; Check for old "innotek" Guest Additions" before rebranding to "Sun"
516 ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\innotek VirtualBox Guest Additions" "UninstallString"
517 StrCmp $0 "" exit ; If string is empty, innotek Guest Additions are probably not installed (anymore)
518
519 MessageBox MB_YESNO $(VBOX_INNOTEK_FOUND) /SD IDYES IDYES innotek_uninstall
520 Pop $2
521 Pop $1
522 Pop $0
523 MessageBox MB_ICONSTOP $(VBOX_INNOTEK_ABORTED) /SD IDOK
524 Quit
525
526innotek_uninstall:
527
528 Call Uninstall_Innotek
529 Goto success
530
531success:
532
533 ; Nothing to do here yet
534
535exit:
536
537 Pop $2
538 Pop $1
539 Pop $0
540
541FunctionEnd
542
543Function CheckForInstalledComponents
544
545 Push $0
546 Push $1
547
548 ${LogVerbose} "Checking for installed components ..."
549 StrCpy $1 ""
550
551 Call SetAppMode64
552
553 ; VBoxGINA already installed? So we need to update the installed version as well,
554 ; regardless whether the user used "/with_autologon" or not
555 ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon" "GinaDLL"
556 ${If} $0 == "VBoxGINA.dll"
557 StrCpy $1 "GINA"
558 ${Else}
559 ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}" ""
560 ${If} $0 == "VBoxCredProv"
561 StrCpy $1 "Credential Provider"
562 ${EndIf}
563 ${EndIf}
564
565!ifdef _DEBUG
566 ${LogVerbose} "Auto-logon module: $0"
567!endif
568
569 ${IfNot} $1 == ""
570 ${LogVerbose} "Auto-logon support ($1) was installed previously"
571 StrCpy $g_bWithAutoLogon "true" ; Force update
572 ${Else}
573 ${LogVerbose} "Auto-logon support was not installed previously"
574 ${EndIf}
575
576 Pop $1
577 Pop $0
578
579FunctionEnd
580
581; Main Files
582Section $(VBOX_COMPONENT_MAIN) SEC01
583
584 SectionIn RO ; Section cannot be unselected (read-only)
585 ${If} $g_bPostInstallStatus == "true"
586 ${LogToVBoxTray} "0" "${PRODUCT_NAME} update started, please wait ..."
587 ${EndIf}
588
589 SetOutPath "$INSTDIR"
590 SetOverwrite on
591
592 Call SetAppMode64
593
594 StrCpy $g_strSystemDir "$SYSDIR"
595
596 ${LogVerbose} "Version: $%VBOX_VERSION_STRING% (Rev $%VBOX_SVN_REV%)"
597 ${If} $g_strAddVerMaj != ""
598 ${LogVerbose} "Previous version: $g_strAddVerMaj.$g_strAddVerMin.$g_strAddVerBuild (Rev $g_strAddVerRev)"
599 ${Else}
600 ${LogVerbose} "No previous version of ${PRODUCT_NAME} detected."
601 ${EndIf}
602!if $%BUILD_TARGET_ARCH% == "amd64"
603 ${LogVerbose} "Detected OS: Windows $g_strWinVersion (64-bit)"
604!else
605 ${LogVerbose} "Detected OS: Windows $g_strWinVersion (32-bit)"
606!endif
607 ${LogVerbose} "System Directory: $g_strSystemDir"
608
609!ifdef _DEBUG
610 ${LogVerbose} "Installer runs in debug mode"
611!endif
612
613 ;
614 ; Here starts the main dispatcher (based on guest OS)
615 ;
616
617 ; Which OS are we using?
618!if $%BUILD_TARGET_ARCH% == "x86" ; 32-bit
619 StrCmp $g_strWinVersion "NT4" nt4 ; Windows NT 4.0
620!endif
621 StrCmp $g_strWinVersion "2000" w2k ; Windows 2000
622 StrCmp $g_strWinVersion "XP" w2k ; Windows XP
623 StrCmp $g_strWinVersion "2003" w2k ; Windows 2003 Server
624 StrCmp $g_strWinVersion "Vista" vista ; Windows Vista
625 StrCmp $g_strWinVersion "7" vista ; Windows 7
626 StrCmp $g_strWinVersion "8" vista ; Windows 8
627
628 ${If} $g_bForceInstall == "true"
629 Goto vista ; Assume newer OS than we know of ...
630 ${EndIf}
631
632 Goto notsupported
633
634!if $%BUILD_TARGET_ARCH% == "x86" ; 32-bit
635nt4: ; Windows NT4
636
637 Call GetServicePack
638 Pop $R0 ; Major version
639 Pop $R1 ; Minor version
640
641 ; At least Service Pack 6 installed?
642 ${If} $R0 <> "6"
643 MessageBox MB_YESNO $(VBOX_NT4_NO_SP6) /SD IDYES IDYES +2
644 Quit
645 ${EndIf}
646
647 ; Copy some common files ...
648 Call Common_CopyFiles
649
650 Call NT4_Main
651 goto success
652!endif
653
654w2k: ; Windows 2000 and XP ...
655
656 ; Copy some common files ...
657 Call Common_CopyFiles
658
659 Call W2K_Main
660 goto success
661
662vista: ; Windows Vista / Windows 7 / Windows 8
663
664 ; Check requirments; this function can abort the installation if necessary!
665 Call Vista_CheckForRequirements
666
667 ; Copy some common files ...
668 Call Common_CopyFiles
669
670 Call W2K_Main ; First install stuff from Windows 2000 / XP
671 Call Vista_Main ; ... and some specific stuff for Vista / Windows 7
672 goto success
673
674notsupported:
675
676 MessageBox MB_ICONSTOP $(VBOX_PLATFORM_UNSUPPORTED) /SD IDOK
677 goto exit
678
679success:
680
681 ; Write a registry key with version and installation path for later lookup
682 WriteRegStr HKLM "${PRODUCT_INSTALL_KEY}" "Version" "$%VBOX_VERSION_STRING_RAW%"
683 WriteRegStr HKLM "${PRODUCT_INSTALL_KEY}" "VersionExt" "$%VBOX_VERSION_STRING%"
684 WriteRegStr HKLM "${PRODUCT_INSTALL_KEY}" "Revision" "$%VBOX_SVN_REV%"
685 WriteRegStr HKLM "${PRODUCT_INSTALL_KEY}" "InstallDir" "$INSTDIR"
686
687 ; Set the reboot flag to tell the finish page that is should
688 ; default to the "reboot now" entry
689 SetRebootFlag true
690
691exit:
692
693SectionEnd
694
695; Auto-logon support (section is hidden at the moment -- only can be enabled via command line switch)
696Section /o -$(VBOX_COMPONENT_AUTOLOGON) SEC02
697
698 Call SetAppMode64
699
700 Call GetWindowsVersion
701 Pop $R0 ; Windows Version
702
703 ${LogVerbose} "Installing auto-logon support ..."
704
705 ; Another GINA already is installed? Check if this is ours, otherwise let the user decide (unless it's a silent setup)
706 ; whether to replace it with the VirtualBox one or not
707 ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon" "GinaDLL"
708 ${If} $0 != ""
709 ${If} $0 != "VBoxGINA.dll"
710 ${LogVerbose} "Found another already installed GINA module: $0"
711 MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1 $(VBOX_COMPONENT_AUTOLOGON_WARN_3RDPARTY) /SD IDYES IDYES install
712 ${LogVerbose} "Skipping GINA installation, keeping: $0"
713 goto skip
714 ${EndIf}
715 ${EndIf}
716
717install:
718
719 ; Do we need VBoxCredProv or VBoxGINA?
720 ${If} $R0 == 'Vista' ; Windows Vista.
721 ${OrIf} $R0 == '7' ; Windows 7.
722 ${OrIf} $R0 == '8' ; Windows 8.
723 ; Use VBoxCredProv on Vista and up.
724 ${LogVerbose} "Installing VirtualBox credential provider ..."
725 !insertmacro ReplaceDLL "$%PATH_OUT%\bin\additions\VBoxCredProv.dll" "$g_strSystemDir\VBoxCredProv.dll" "$INSTDIR"
726 WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}" "" "VBoxCredProv" ; adding to (default) key
727 WriteRegStr HKCR "CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}" "" "VBoxCredProv" ; adding to (Default) key
728 WriteRegStr HKCR "CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32" "" "VBoxCredProv.dll" ; adding to (Default) key
729 WriteRegStr HKCR "CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32" "ThreadingModel" "Apartment"
730 ${Else} ; Use VBoxGINA on older Windows OSes (< Vista)
731 ${LogVerbose} "Installing VirtualBox GINA ..."
732 !insertmacro ReplaceDLL "$%PATH_OUT%\bin\additions\VBoxGINA.dll" "$g_strSystemDir\VBoxGINA.dll" "$INSTDIR"
733 WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon" "GinaDLL" "VBoxGINA.dll"
734 ; Add Windows notification package callbacks for VBoxGINA
735 WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon\Notify\VBoxGINA" "DLLName" "VBoxGINA.dll"
736 WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon\Notify\VBoxGINA" "Impersonate" 0
737 WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon\Notify\VBoxGINA" "StopScreenSaver" "WnpScreenSaverStop"
738 ${EndIf}
739
740skip:
741
742 ; Nothing to do here right now
743
744exit:
745
746SectionEnd
747
748; Prepares the access rights for replacing
749; a WRP (Windows Resource Protection) protected file
750Function PrepareWRPFile
751
752 Pop $0
753
754 ${IfNot} ${FileExists} "$0"
755 ${LogVerbose} "WRP: File $0 does not exist, skipping"
756 Return
757 ${EndIf}
758
759 ${If} ${FileExists} "$g_strSystemDir\takeown.exe"
760 ${CmdExecute} "$\"$g_strSystemDir\takeown.exe$\" /F $\"$0$\"" "true"
761 ${Else}
762 ${LogVerbose} "WRP: Warning: takeown.exe not found, skipping"
763 ${EndIf}
764
765 AccessControl::SetFileOwner "$0" "(S-1-5-32-545)"
766 Pop $1
767 ${LogVerbose} "WRP: Setting file owner for $0 returned: $1"
768
769 AccessControl::GrantOnFile "$0" "(S-1-5-32-545)" "FullAccess"
770 Pop $1
771 ${LogVerbose} "WRP: Setting access rights for $0 returned: $1"
772
773!if $%VBOX_WITH_GUEST_INSTALL_HELPER% == "1"
774 !ifdef WFP_FILE_EXCEPTION
775 VBoxGuestInstallHelper::DisableWFP "$0"
776 Pop $1 ; Get return value (ignored for now)
777 ${LogVerbose} "WRP: Setting WFP exception for $0 returned: $1"
778 !endif
779!endif
780
781FunctionEnd
782
783; Direct3D support
784Section /o $(VBOX_COMPONENT_D3D) SEC03
785
786!if $%VBOX_WITH_WDDM% == "1"
787 ${If} $g_bWithWDDM == "true"
788 ; All D3D components are installed with WDDM driver package, nothing to be done here
789 Return
790 ${EndIf}
791!endif
792
793 SetOverwrite on
794
795 ${If} $g_strSystemDir == ''
796 StrCpy $g_strSystemDir "$SYSDIR"
797 ${EndIf}
798
799 SetOutPath $g_strSystemDir
800 ${LogVerbose} "Installing Direct3D support ..."
801 FILE "$%PATH_OUT%\bin\additions\VBoxD3D8.dll"
802 FILE "$%PATH_OUT%\bin\additions\VBoxD3D9.dll"
803 FILE "$%PATH_OUT%\bin\additions\wined3d.dll"
804
805 ;
806 ; Update DLL cache
807 ;
808 ${If} $g_bCapDllCache == "true"
809 ${If} ${FileExists} "$g_strSystemDir\dllcache"
810 SetOutPath "$g_strSystemDir\dllcache"
811 ${CopyFileEx} "" "$g_strSystemDir\dllcache\d3d8.dll" "$g_strSystemDir\dllcache\msd3d8.dll" "Microsoft Corporation" "$%BUILD_TARGET_ARCH%"
812 ${CopyFileEx} "" "$g_strSystemDir\dllcache\d3d9.dll" "$g_strSystemDir\dllcache\msd3d9.dll" "Microsoft Corporation" "$%BUILD_TARGET_ARCH%"
813
814 Push "$g_strSystemDir\dllcache\d3d8.dll"
815 Call PrepareWRPFile
816
817 Push "$g_strSystemDir\dllcache\d3d9.dll"
818 Call PrepareWRPFile
819
820 ; Exchange DLLs
821 ${InstallFileEx} "" "$%PATH_OUT%\bin\additions\d3d8.dll" "$g_strSystemDir\dllcache\d3d8.dll" "$TEMP"
822 ${InstallFileEx} "" "$%PATH_OUT%\bin\additions\d3d9.dll" "$g_strSystemDir\dllcache\d3d9.dll" "$TEMP"
823 ${Else}
824 ${LogVerbose} "DLL cache does not exist, skipping"
825 ${EndIf}
826 ${EndIf}
827
828 ;
829 ; Save original DLLs (only if msd3d*.dll does not exist) ...
830 ;
831 SetOutPath $g_strSystemDir
832 ${CopyFileEx} "" "$g_strSystemDir\d3d8.dll" "$g_strSystemDir\msd3d8.dll" "Microsoft Corporation" "$%BUILD_TARGET_ARCH%"
833 ${CopyFileEx} "" "$g_strSystemDir\d3d9.dll" "$g_strSystemDir\msd3d9.dll" "Microsoft Corporation" "$%BUILD_TARGET_ARCH%"
834
835 Push "$g_strSystemDir\d3d8.dll"
836 Call PrepareWRPFile
837
838 Push "$g_strSystemDir\d3d9.dll"
839 Call PrepareWRPFile
840
841 ; Exchange DLLs
842 ${InstallFileEx} "" "$%PATH_OUT%\bin\additions\d3d8.dll" "$g_strSystemDir\d3d8.dll" "$TEMP"
843 ${InstallFileEx} "" "$%PATH_OUT%\bin\additions\d3d9.dll" "$g_strSystemDir\d3d9.dll" "$TEMP"
844
845!if $%BUILD_TARGET_ARCH% == "amd64"
846 ; Only 64-bit installer:
847 ; Also copy 32-bit DLLs on 64-bit Windows in SysWOW64 node
848 SetOutPath $g_strSysWow64
849 ${LogVerbose} "Installing Direct3D support for 32-bit applications (SysWOW64: $g_strSysWow64) ..."
850 FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxD3D8.dll"
851 FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxD3D9.dll"
852 FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\wined3d.dll"
853
854 ;
855 ; Update DLL cache
856 ;
857 ${If} $g_bCapDllCache == "true"
858 ${If} ${FileExists} "$g_strSysWow64\dllcache"
859 SetOutPath "$g_strSysWow64\dllcache"
860 ${CopyFileEx} "" "$g_strSysWow64\dllcache\d3d8.dll" "$g_strSysWow64\dllcache\msd3d8.dll" "Microsoft Corporation" "x86"
861 ${CopyFileEx} "" "$g_strSysWow64\dllcache\d3d9.dll" "$g_strSysWow64\dllcache\msd3d9.dll" "Microsoft Corporation" "x86"
862
863 Push "$g_strSysWow64\dllcache\d3d8.dll"
864 Call PrepareWRPFile
865
866 Push "$g_strSysWow64\dllcache\d3d9.dll"
867 Call PrepareWRPFile
868
869 ; Exchange DLLs
870 ${InstallFileEx} "" "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d8.dll" "$g_strSysWow64\dllcache\d3d8.dll" "$TEMP"
871 ${InstallFileEx} "" "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d9.dll" "$g_strSysWow64\dllcache\d3d9.dll" "$TEMP"
872 ${Else}
873 ${LogVerbose} "DLL cache does not exist, skipping"
874 ${EndIf}
875 ${EndIf}
876
877 ;
878 ; Update original DLLs
879 ;
880
881 ; Save original DLLs (only if msd3d*.dll does not exist) ...
882 ${CopyFileEx} "" "$g_strSysWow64\d3d8.dll" "$g_strSysWow64\msd3d8.dll" "Microsoft Corporation" "x86"
883 ${CopyFileEx} "" "$g_strSysWow64\d3d9.dll" "$g_strSysWow64\msd3d9.dll" "Microsoft Corporation" "x86"
884
885 Push "$g_strSysWow64\d3d8.dll"
886 Call PrepareWRPFile
887
888 Push "$g_strSysWow64\d3d9.dll"
889 Call PrepareWRPFile
890
891 ; Exchange DLLs
892 ${InstallFileEx} "" "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d8.dll" "$g_strSysWow64\d3d8.dll" "$TEMP"
893 ${InstallFileEx} "" "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d9.dll" "$g_strSysWow64\d3d9.dll" "$TEMP"
894
895!endif ; amd64
896 Goto done
897
898error:
899 ; @todo
900 Goto exit
901
902done:
903
904!ifndef WFP_FILE_EXCEPTION
905 MessageBox MB_ICONINFORMATION|MB_OK $(VBOX_WFP_WARN_REPLACE) /SD IDOK
906!endif
907 Goto exit
908
909exit:
910
911SectionEnd
912
913!ifdef USE_MUI
914 ;Assign language strings to sections
915 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
916 !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} $(VBOX_COMPONENT_MAIN_DESC)
917 !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} $(VBOX_COMPONENT_AUTOLOGON_DESC)
918 !if $%VBOX_WITH_CROGL% == "1"
919 !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} $(VBOX_COMPONENT_D3D_DESC)
920 !endif
921 !insertmacro MUI_FUNCTION_DESCRIPTION_END
922!endif ; USE_MUI
923
924Section -Content
925
926 WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
927
928SectionEnd
929
930Section -StartMenu
931
932 CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
933 CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" "" "$INSTDIR\iexplore.ico"
934 CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Uninstall.lnk" "$INSTDIR\uninst.exe"
935
936SectionEnd
937
938; This section is called after all the files are in place
939Section -Post
940
941!ifdef _DEBUG
942 ${LogVerbose} "Doing post install ..."
943!endif
944
945!ifdef EXTERNAL_UNINSTALLER
946 SetOutPath "$INSTDIR"
947 FILE "$%PATH_TARGET%\uninst.exe"
948!else
949 WriteUninstaller "$INSTDIR\uninst.exe"
950!endif
951
952 ; Write uninstaller in "Add / Remove programs"
953 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
954 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
955 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
956 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
957 WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
958
959 ; Tune TcpWindowSize for a better network throughput
960 WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" "TcpWindowSize" 64240
961
962 ; Add Sun Ray client info keys
963 ; Note: We only need 32-bit keys (HKLM\Software / HKLM\Software\Wow6432Node)
964!if $%BUILD_TARGET_ARCH% == "amd64"
965 WriteRegStr HKLM "SOFTWARE\Wow6432Node\Oracle\Sun Ray\ClientInfoAgent\ReconnectActions" "" ""
966 WriteRegStr HKLM "SOFTWARE\Wow6432Node\Oracle\Sun Ray\ClientInfoAgent\DisconnectActions" "" ""
967!else
968 WriteRegStr HKLM "SOFTWARE\Oracle\Sun Ray\ClientInfoAgent\ReconnectActions" "" ""
969 WriteRegStr HKLM "SOFTWARE\Oracle\Sun Ray\ClientInfoAgent\DisconnectActions" "" ""
970!endif
971
972 ${LogVerbose} "Installation completed."
973
974SectionEnd
975
976; !!! NOTE: This function *has* to be right under the last section; otherwise it does
977; *not* get called! Don't ask me why ... !!!
978Function .onSelChange
979
980 Push $0
981
982 ; Handle selection of D3D component
983 SectionGetFlags ${SEC03} $0
984 ${If} $0 == ${SF_SELECTED}
985
986 StrCpy $g_bWithD3D "true"
987
988!if $%VBOX_WITH_WDDM% == "1"
989 ; If we're able to use the WDDM driver just use it instead of the replaced
990 ; D3D components below
991 ${If} $g_bCapWDDM == "true"
992 ;
993 ; Temporary solution: Since WDDM is marked as experimental yet we notify the user
994 ; that WDDM (Aero) support is available but not recommended for production use. He now
995 ; can opt-in for installing WDDM or still go for the old (XPDM) way -- safe mode still required!
996 ;
997 MessageBox MB_ICONQUESTION|MB_YESNO $(VBOX_COMPONENT_D3D_OR_WDDM) /SD IDNO IDYES d3d_install
998 ; Display an unconditional hint about needed VRAM sizes
999 ; Note: We also could use the PCI configuration space (WMI: Win32_SystemSlot Class) for querying
1000 ; the current VRAM size, but let's keep it simple for now
1001 MessageBox MB_ICONINFORMATION|MB_OK $(VBOX_COMPONENT_D3D_HINT_VRAM) /SD IDOK
1002 StrCpy $g_bWithWDDM "true"
1003 Goto exit
1004 ${EndIf}
1005
1006d3d_install:
1007
1008!endif ; $%VBOX_WITH_WDDM% == "1"
1009
1010 ${If} $g_bForceInstall != "true"
1011 ; Do not install on < XP
1012 ${If} $g_strWinVersion == "NT4"
1013 ${OrIf} $g_strWinVersion == "2000"
1014 ${OrIf} $g_strWinVersion == ""
1015 MessageBox MB_ICONINFORMATION|MB_OK $(VBOX_COMPONENT_D3D_NOT_SUPPORTED) /SD IDOK
1016 Goto d3d_disable
1017 ${EndIf}
1018 ${EndIf}
1019
1020 ; If force flag is set skip the safe mode check
1021 ${If} $g_bForceInstall != "true"
1022 ; If we're not in safe mode, print a warning and don't install D3D support
1023 ${If} $g_iSystemMode == '0'
1024 MessageBox MB_ICONINFORMATION|MB_OK $(VBOX_COMPONENT_D3D_NO_SM) /SD IDOK
1025 Goto d3d_disable
1026 ${EndIf}
1027 ${EndIf}
1028
1029 ${Else} ; D3D unselected again
1030
1031 ${If} $g_strWinVersion != "8" ; On Windows 8 WDDM is mandatory
1032 StrCpy $g_bWithWDDM "false"
1033 ${EndIf}
1034
1035 ${EndIf}
1036 Goto exit
1037
1038d3d_disable:
1039
1040 StrCpy $g_bWithD3D "false"
1041 IntOp $0 $0 & ${SECTION_OFF} ; Unselect section again
1042 SectionSetFlags ${SEC03} $0
1043 Goto exit
1044
1045exit:
1046
1047 Pop $0
1048
1049FunctionEnd
1050
1051; This function is called when a critical error occurred
1052Function .onInstFailed
1053
1054 MessageBox MB_ICONSTOP $(VBOX_ERROR_INST_FAILED) /SD IDOK
1055
1056 ${If} $g_bPostInstallStatus == "true"
1057 ${LogToVBoxTray} "2" "Error while installing ${PRODUCT_NAME}!"
1058 ${EndIf}
1059
1060 ; Set overall exit code
1061 SetErrorLevel 1
1062
1063FunctionEnd
1064
1065; This function is called when installation was successful!
1066Function .onInstSuccess
1067
1068 ${If} $g_bPostInstallStatus == "true"
1069 ${LogToVBoxTray} "0" "${PRODUCT_NAME} successfully updated!"
1070 ${EndIf}
1071
1072FunctionEnd
1073
1074; This function is called at the very beginning of installer execution
1075Function .onInit
1076
1077 Push $0
1078
1079 ; Init values
1080 StrCpy $g_iSystemMode "0"
1081 StrCpy $g_strCurUser "<None>"
1082 StrCpy $g_strAddVerMaj "0"
1083 StrCpy $g_strAddVerMin "0"
1084 StrCpy $g_strAddVerBuild "0"
1085 StrCpy $g_strAddVerRev "0"
1086
1087 StrCpy $g_bIgnoreUnknownOpts "false"
1088 StrCpy $g_bLogEnable "false"
1089 StrCpy $g_bFakeWHQL "false"
1090 StrCpy $g_bForceInstall "false"
1091 StrCpy $g_bUninstall "false"
1092 StrCpy $g_bRebootOnExit "false"
1093 StrCpy $g_iScreenX "0"
1094 StrCpy $g_iScreenY "0"
1095 StrCpy $g_iScreenBpp "0"
1096 StrCpy $g_iSfOrder "0"
1097 StrCpy $g_bNoVBoxServiceExit "false"
1098 StrCpy $g_bNoVBoxTrayExit "false"
1099 StrCpy $g_bNoVideoDrv "false"
1100 StrCpy $g_bNoGuestDrv "false"
1101 StrCpy $g_bNoMouseDrv "false"
1102 StrCpy $g_bWithAutoLogon "false"
1103 StrCpy $g_bWithD3D "false"
1104 StrCpy $g_bOnlyExtract "false"
1105 StrCpy $g_bWithWDDM "false"
1106 StrCpy $g_bCapDllCache "false"
1107 StrCpy $g_bCapWDDM "false"
1108 StrCpy $g_bPostInstallStatus "false"
1109
1110 ; We need a special directory set to SysWOW64 because some
1111 ; shell operations don't support file redirection (yet)
1112 StrCpy $g_strSysWow64 "$WINDIR\SysWOW64"
1113
1114 SetErrorLevel 0
1115 ClearErrors
1116
1117!ifdef UNINSTALLER_ONLY
1118
1119 ;
1120 ; If UNINSTALLER_ONLY is defined, we're only interested in uninst.exe
1121 ; so we can sign it
1122 ;
1123 ; Note that the Quit causes the exit status to be 2 instead of 0
1124 ;
1125 WriteUninstaller "$%PATH_TARGET%\uninst.exe"
1126 Quit
1127
1128!else
1129
1130 ; Handle command line
1131 Call HandleCommandLine
1132
1133 ; Check if there's already another instance of the installer is running -
1134 ; important for preventing NT4 to spawn the installer twice
1135 System::Call 'kernel32::CreateMutexA(i 0, i 0, t "VBoxGuestInstaller") ?e'
1136 Pop $0
1137 ${If} $0 != 0
1138 Quit
1139 ${EndIf}
1140
1141 IfSilent 0 +2
1142 StrCpy $g_bLogEnable "true" ; Force logging in silent mode
1143
1144 ${LogEnable} "$g_bLogEnable"
1145 IfSilent 0 +2
1146 ${LogVerbose} "Installer runs in silent mode"
1147
1148 ; Retrieve Windows version and store result in $g_strWinVersion
1149 Call GetWindowsVer
1150
1151 ; Retrieve capabilities
1152 Call CheckForCapabilities
1153
1154 ; Get user Name
1155 AccessControl::GetCurrentUserName
1156 Pop $g_strCurUser
1157 ${LogVerbose} "Current user is: $g_strCurUser"
1158
1159 ; Only extract files? This action can be called even from non-Admin users
1160 ; and non-compatible architectures
1161 ${If} $g_bOnlyExtract == "true"
1162 Call ExtractFiles
1163 MessageBox MB_OK|MB_ICONINFORMATION $(VBOX_EXTRACTION_COMPLETE) /SD IDOK
1164 Quit
1165 ${EndIf}
1166
1167 ; Check for correct architecture
1168 Call CheckArchitecture
1169 Pop $0
1170 ${If} $0 <> 0 ; Wrong architecture? Tell the world
1171!if $%BUILD_TARGET_ARCH% == "amd64"
1172 MessageBox MB_ICONSTOP $(VBOX_NOTICE_ARCH_AMD64) /SD IDOK
1173!else
1174 MessageBox MB_ICONSTOP $(VBOX_NOTICE_ARCH_X86) /SD IDOK
1175!endif
1176 Abort
1177 ${EndIf}
1178
1179 ; Has the user who calls us admin rights?
1180 UserInfo::GetAccountType
1181 Pop $0
1182 ${If} $0 != "Admin"
1183 MessageBox MB_ICONSTOP $(VBOX_NOADMIN) /SD IDOK
1184 Abort
1185 ${EndIf}
1186
1187 ; Only uninstall?
1188 ${If} $g_bUninstall == "true"
1189 Call Uninstall_Innotek
1190 Call Uninstall
1191 MessageBox MB_ICONINFORMATION|MB_OK $(VBOX_UNINST_SUCCESS) /SD IDOK
1192 Quit
1193 ${EndIf}
1194
1195 Call CheckForInstalledComponents
1196
1197 ; Set section bits
1198 ${If} $g_bWithAutoLogon == "true" ; Auto-logon support
1199 !insertmacro SelectSection ${SEC02}
1200 ${EndIf}
1201!if $%VBOX_WITH_CROGL% == "1"
1202 ${If} $g_bWithD3D == "true" ; D3D support
1203 !insertmacro SelectSection ${SEC03}
1204 ${EndIf}
1205!endif
1206 ; On Windows 8 we always select the 3D section and
1207 ; disable it so that it cannot be deselected again
1208 ${If} $g_strWinVersion == "8"
1209 IntOp $0 ${SF_SELECTED} | ${SF_RO}
1210 SectionSetFlags ${SEC03} $0
1211 ${EndIf}
1212
1213!ifdef USE_MUI
1214 ; Display language selection dialog (will be hidden in silent mode!)
1215 !ifdef VBOX_INSTALLER_ADD_LANGUAGES
1216 !insertmacro MUI_LANGDLL_DISPLAY
1217 !endif
1218!endif
1219
1220 Call SetAppMode64
1221
1222 ; Check for old additions
1223 Call CheckForOldGuestAdditions
1224 Call GetAdditionsVersion
1225
1226 ; Due to some bug in NSIS the license page won't be displayed if we're in
1227 ; 64-bit registry view, so as a workaround switch back to 32-bit (Wow6432Node)
1228 ; mode for now
1229 Call SetAppMode32
1230
1231!endif ; UNINSTALLER_ONLY
1232
1233 Pop $0
1234
1235FunctionEnd
1236
1237;
1238; The uninstaller is built separately when doing code signing
1239; For some reason NSIS still finds the Uninstall section even
1240; when EXTERNAL_UNINSTALLER is defined. This causes a silly warning
1241;
1242!ifndef EXTERNAL_UNINSTALLER
1243
1244Function un.onUninstSuccess
1245
1246 HideWindow
1247 MessageBox MB_ICONINFORMATION|MB_OK $(VBOX_UNINST_SUCCESS) /SD IDOK
1248
1249FunctionEnd
1250
1251Function un.onInit
1252
1253 ; Has the user who calls us admin rights?
1254 UserInfo::GetAccountType
1255 Pop $0
1256 ${If} $0 != "Admin"
1257 MessageBox MB_ICONSTOP $(VBOX_NOADMIN) /SD IDOK
1258 Abort
1259 ${EndIf}
1260
1261 MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 $(VBOX_UNINST_CONFIRM) /SD IDYES IDYES proceed
1262 Quit
1263
1264proceed:
1265
1266 Call un.SetAppMode64
1267
1268 ; Set system directory
1269 StrCpy $g_strSystemDir "$SYSDIR"
1270
1271 ; We need a special directory set to SysWOW64 because some
1272 ; shell operations don't support file redirection (yet)
1273 StrCpy $g_strSysWow64 "$WINDIR\SysWOW64"
1274
1275 ; Retrieve Windows version we're running on and store it in $g_strWinVersion
1276 Call un.GetWindowsVer
1277
1278 ; Retrieve capabilities
1279 Call un.CheckForCapabilities
1280
1281FunctionEnd
1282
1283Section Uninstall
1284
1285!ifdef _DEBUG
1286 ${LogEnable} "true"
1287!endif
1288
1289 Call un.SetAppMode64
1290
1291 ; Call the uninstall main function
1292 Call un.Uninstall
1293
1294 ; ... and remove the local install directory
1295 Call un.UninstallInstDir
1296
1297!ifndef _DEBUG
1298 SetAutoClose true
1299 MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 $(VBOX_REBOOT_REQUIRED) /SD IDNO IDYES restart
1300 StrCmp $g_bRebootOnExit "true" restart
1301!endif
1302
1303 Goto exit
1304
1305restart:
1306
1307 ${LogVerbose} "Rebooting ..."
1308 Reboot
1309
1310exit:
1311
1312SectionEnd
1313
1314; !EXTERNAL_UNINSTALLER
1315!endif
1316
1317;Direct the output to our bin dir
1318!cd "$%PATH_OUT%\bin\additions"
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette