VBoxGuestAdditions.nsi revision 156101683587682f6d63b4af322f611d90b77fce
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!if $%BUILD_TYPE% == "debug"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !define _DEBUG ; Turn this on to get extra output
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync; Defines for special functions
e64031e20c39650a7bc902a3e1aba613b9415deevboxsync!define WHQL_FAKE ; Turns on the faking of non WHQL signed / approved drivers.
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; Needs the VBoxWHQLFake.exe in the additions output directory!
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define VENDOR_ROOT_KEY "SOFTWARE\$%VBOX_VENDOR_SHORT%"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define PRODUCT_NAME "$%VBOX_PRODUCT% Guest Additions"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define PRODUCT_DESC "$%VBOX_PRODUCT% Guest Additions"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define PRODUCT_VERSION "$%VBOX_VERSION_MAJOR%.$%VBOX_VERSION_MINOR%.$%VBOX_VERSION_BUILD%.0"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define PRODUCT_PUBLISHER " $%VBOX_VENDOR%"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define PRODUCT_COPYRIGHT "(C) $%VBOX_C_YEAR% $%VBOX_VENDOR%"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define PRODUCT_OUTPUT "VBoxWindowsAdditions-$%BUILD_TARGET_ARCH%.exe"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define PRODUCT_WEB_SITE "http://www.virtualbox.org"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define PRODUCT_INSTALL_KEY "${VENDOR_ROOT_KEY}\VirtualBox Guest Additions"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define PRODUCT_UNINST_ROOT_KEY "HKLM"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVIProductVersion "${PRODUCT_VERSION}"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVIAddVersionKey "FileVersion" "$%VBOX_VERSION_STRING%"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVIAddVersionKey "ProductName" "${PRODUCT_NAME}"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}"
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncVIAddVersionKey "CompanyName" "${PRODUCT_PUBLISHER}"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVIAddVersionKey "FileDescription" "${PRODUCT_DESC}"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVIAddVersionKey "LegalCopyright" "${PRODUCT_COPYRIGHT}"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVIAddVersionKey "InternalName" "${PRODUCT_OUTPUT}"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync; This registry key will hold the mouse driver path before install (NT4 only)
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define ORG_MOUSE_PATH "MousePath"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro GetParameters
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro GetOptions
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro WordFind
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro StrFilter
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!include "strstr.nsh" ; Function "strstr"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!include "servicepack.nsh" ; Function "GetServicePack"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!include "winver.nsh" ; Function for determining Windows version
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define REPLACEDLL_NOREGISTER ; Replace in use DLL function
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!include "dumplog.nsh" ; Dump log to file function
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!if $%BUILD_TARGET_ARCH% == "amd64"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync; Set Modern UI (MUI) as default
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!define USE_MUI
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!ifdef USE_MUI
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; Use modern UI, version 2
6dd8f5023a9ba7588212331db90059553136fe33vboxsync ; MUI Settings
6dd8f5023a9ba7588212331db90059553136fe33vboxsync !define MUI_WELCOMEFINISHPAGE_BITMAP "$%VBOX_BRAND_WIN_ADD_INST_DLGBMP%"
6dd8f5023a9ba7588212331db90059553136fe33vboxsync !define MUI_ABORTWARNING
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !define MUI_WELCOMEPAGE_TITLE_3LINES "Welcome to the ${PRODUCT_NAME} Additions Setup"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; API defines
9127c416edfd6f9266e387f7abd7aa9904eecbc9vboxsync !define SM_CLEANBOOT 67
6dd8f5023a9ba7588212331db90059553136fe33vboxsync !if $%BUILD_TARGET_ARCH% == "x86" ; 32-bit
6dd8f5023a9ba7588212331db90059553136fe33vboxsync !define MUI_ICON "$%VBOX_NSIS_ICON_FILE%"
6dd8f5023a9ba7588212331db90059553136fe33vboxsync !define MUI_UNICON "$%VBOX_NSIS_ICON_FILE%"
6dd8f5023a9ba7588212331db90059553136fe33vboxsync !else ; 64-bit
6dd8f5023a9ba7588212331db90059553136fe33vboxsync !define MUI_ICON "$%VBOX_WINDOWS_ADDITIONS_ICON_FILE%"
6dd8f5023a9ba7588212331db90059553136fe33vboxsync !define MUI_UNICON "$%VBOX_WINDOWS_ADDITIONS_ICON_FILE%"
6dd8f5023a9ba7588212331db90059553136fe33vboxsync ; Welcome page
6dd8f5023a9ba7588212331db90059553136fe33vboxsync !insertmacro MUI_PAGE_WELCOME
6dd8f5023a9ba7588212331db90059553136fe33vboxsync ; License page
6dd8f5023a9ba7588212331db90059553136fe33vboxsync !insertmacro MUI_PAGE_LICENSE "$(VBOX_LICENSE)"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !define MUI_LICENSEPAGE_RADIOBUTTONS
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; Directory page
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro MUI_PAGE_DIRECTORY
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; Components Page
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro MUI_PAGE_COMPONENTS
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; Instfiles page
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro MUI_PAGE_INSTFILES
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !ifndef _DEBUG
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !define MUI_FINISHPAGE_TITLE_3LINES ; Have a bit more vertical space for text
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro MUI_PAGE_FINISH ; Only show in release mode - useful information for debugging!
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; Uninstaller pages
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro MUI_UNPAGE_INSTFILES
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; Define languages we will use
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro MUI_LANGUAGE "English"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro MUI_LANGUAGE "French"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro MUI_LANGUAGE "German"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; Set branding text which appears on the horizontal line at the bottom
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!ifdef _DEBUG
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync BrandingText "VirtualBox Windows Additions $%VBOX_VERSION_STRING% ($%VBOX_SVN_REV%) - Debug Build"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync BrandingText "VirtualBox Windows Additions $%VBOX_VERSION_STRING%"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; Set license language
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync LicenseLangString VBOX_LICENSE ${LANG_ENGLISH} "$%VBOX_BRAND_LICENSE_RTF%"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; If license files not available (OSE / PUEL) build, then use the English one as default.
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !ifdef VBOX_BRAND_fr_FR_LICENSE_RTF
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync LicenseLangString VBOX_LICENSE ${LANG_FRENCH} "$%VBOX_BRAND_fr_FR_LICENSE_RTF%"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync LicenseLangString VBOX_LICENSE ${LANG_FRENCH} "$%VBOX_BRAND_LICENSE_RTF%"
6dd8f5023a9ba7588212331db90059553136fe33vboxsync !ifdef VBOX_BRAND_de_DE_LICENSE_RTF
6dd8f5023a9ba7588212331db90059553136fe33vboxsync LicenseLangString VBOX_LICENSE ${LANG_GERMAN} "$%VBOX_BRAND_de_DE_LICENSE_RTF%"
6dd8f5023a9ba7588212331db90059553136fe33vboxsync LicenseLangString VBOX_LICENSE ${LANG_GERMAN} "$%VBOX_BRAND_LICENSE_RTF%"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync !insertmacro MUI_RESERVEFILE_LANGDLL
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!else ; !USE_MUI
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync Page license
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync Page components
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync Page directory
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync Page instfiles
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync; Language files
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!include "Languages\English.nsh"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!include "Languages\French.nsh"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!include "Languages\German.nsh"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync; Variables and output files
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncName "${PRODUCT_NAME} $%VBOX_VERSION_STRING%"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!ifdef UNINSTALLER_ONLY
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!echo "Uninstaller only!"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncOutFile "$%PATH_TARGET%\VBoxWindowsAdditions-$%BUILD_TARGET_ARCH%-uninst.exe"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncOutFile "VBoxWindowsAdditions-$%BUILD_TARGET_ARCH%.exe"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!if $%BUILD_TARGET_ARCH% == "x86" ; 32-bit
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync InstallDir "$PROGRAMFILES32\$%VBOX_VENDOR_SHORT%\VirtualBox Guest Additions"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!else ; 64-bit
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync InstallDir "$PROGRAMFILES64\$%VBOX_VENDOR_SHORT%\VirtualBox Guest Additions"
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncInstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncShowInstDetails show
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncShowUnInstDetails show
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncRequestExecutionLevel highest
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncVar g_iSystemMode ; Current system mode (0 = Normal boot, 1 = Fail-safe boot, 2 = Fail-safe with network boot)
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncVar g_strSystemDir ; Windows system directory
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncVar g_strCurUser ; Current user using the system
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncVar g_strAddVerMaj ; Installed Guest Additions: Major version
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncVar g_strAddVerMin ; Installed Guest Additions: Minor version
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncVar g_strAddVerBuild ; Installed Guest Additions: Build number
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncVar g_strAddVerRev ; Installed Guest Additions: SVN revision
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncVar g_strWinVersion ; Current Windows version we're running on
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncVar g_bLogEnable ; Do logging when installing? "true" or "false"
6dd8f5023a9ba7588212331db90059553136fe33vboxsyncVar g_bFakeWHQL ; Cmd line: Fake Windows to install non WHQL certificated drivers (only for W2K and XP currently!!) ("/unsig_drv")
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bForceInstall ; Cmd line: Force installation on unknown Windows OS version.
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bUninstall ; Cmd line: Just uninstall any previous Guest Additions and exit
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bRebootOnExit ; Cmd line: Auto-Reboot on successful installation. Good for unattended installations ("/reboot")
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_iScreenBpp ; Cmd line: Screen depth ("/depth=X")
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_iScreenX ; Cmd line: Screen resolution X ("/resx=X")
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_iScreenY ; Cmd line: Screen resolution Y ("/resy=Y")
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_iSfOrder ; Cmd line: Order of Shared Folders network provider (0=first, 1=second, ...)
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bIgnoreUnknownOpts ; Cmd line: Ignore unknown options (don't display the help)
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bNoVBoxServiceExit ; Cmd line: Do not quit VBoxService before updating - install on next reboot
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bNoVBoxTrayExit ; Cmd line: Do not quit VBoxTray before updating - install on next reboot
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bNoVideoDrv ; Cmd line: Do not install the VBoxVideo driver
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bNoGuestDrv ; Cmd line: Do not install the VBoxGuest driver
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bNoMouseDrv ; Cmd line: Do not install the VBoxMouse driver
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bWithAutoLogon ; Cmd line: Install VBoxGINA / VBoxCredProv for auto logon support
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bWithD3D ; Cmd line: Install Direct3D support
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bWithWDDM ; Install the WDDM driver instead of the normal one
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bOnlyExtract ; Cmd line: Only extract all files, do *not* install them. Only valid with param "/D" (target directory)
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncVar g_bCapWDDM ; Capability: Is the guest able to handle/use our WDDM driver?
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync; Platform parts of this installer
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!if $%BUILD_TARGET_ARCH% == "x86" ; 32-bit only
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!include "VBoxGuestAdditionsUninstall.nsh" ; Product uninstallation
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync!include "VBoxGuestAdditionsUninstallOld.nsh" ; Uninstallation of deprecated versions which must be removed first
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsyncFunction HandleCommandLine
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync Push $0 ; Command line (without process name)
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync Push $1 ; Number of parameters
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync Push $2 ; Current parameter index
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync Push $3 ; Current parameter pair (name=value)
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync Push $4 ; Current parameter name
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync Push $5 ; Current parameter value (if present)
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $1 "0" ; Init param counter
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $2 "1" ; Init current param counter
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${GetParameters} $0 ; Extract command line
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${If} $0 == "" ; If no parameters at all exit
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; Enable for debugging
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ;MessageBox MB_OK "CmdLine: $0"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${WordFind} $0 " " "#" $1 ; Get number of parameters in cmd line
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${If} $0 == $1 ; If result matches the input then
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $1 "1" ; no delimiter was found. Correct to 1 word total.
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${While} $2 <= $1 ; Loop through all params
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${WordFind} $0 " " "+$2" $3 ; Get current name=value pair
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${WordFind} $3 "=" "+1" $4 ; Get current param name
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${WordFind} $3 "=" "+2" $5 ; Get current param value
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${StrFilter} $4 "-" "" "" $4 ; Transfer param name to lowercase
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ; Enable for debugging
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ;MessageBox MB_OK "#$2 of #$1, param='$3', name=$4, val=$5"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Switch} $4
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/d' ; NSIS: /D=<instdir> switch, skip
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/depth'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} 'depth'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $g_iScreenBpp $5
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/extract'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $g_bOnlyExtract "true"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/force'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $g_bForceInstall "true"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/help'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/H'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/h'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/?'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/ignore_unknownopts' ; Not officially documented
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $g_bIgnoreUnknownOpts "true"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/l'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/log'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/logging'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $g_bLogEnable "true"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/ncrc' ; NSIS: /NCRC switch, skip
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/no_vboxservice_exit' ; Not officially documented
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $g_bNoVBoxServiceExit "true"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/no_vboxtray_exit' ; Not officially documented
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $g_bNoVBoxTrayExit "true"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/no_videodrv' ; Not officially documented
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $g_bNoVideoDrv "true"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/no_guestdrv' ; Not officially documented
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $g_bNoGuestDrv "true"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/no_mousedrv' ; Not officially documented
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $g_bNoMouseDrv "true"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/reboot'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $g_bRebootOnExit "true"
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/s' ; NSIS: /S switch, skip
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} '/sforder'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync ${Case} 'sforder'
d1a00c93378091ef28db9d959b2d692cc8143a07vboxsync StrCpy $g_iSfOrder $5
/force$\t$\tForce installation on unknown/undetected Windows versions$\r$\n \
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Sun VirtualBox Guest Additions" "UninstallString"
StrCmp $0 "" sun_xvm_check ; If string is empty, Sun additions are probably not installed (anymore).
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Sun xVM VirtualBox Guest Additions" "UninstallString"
StrCmp $0 "" innotek_check ; If string is empty, Sun xVM additions are probably not installed (anymore).
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\innotek VirtualBox Guest Additions" "UninstallString"
StrCmp $g_strAddVerMaj "1" v1 ; Handle major version "v1.x"
StrCmp $g_strAddVerMaj "2" v2 ; Handle major version "v2.x"
StrCmp $g_strAddVerMaj "3" v3 ; Handle major version "v3.x"
StrCmp $g_strAddVerMin "5" v1_5 ; Handle minor version "v1.5.x"
StrCmp $g_strAddVerMin "6" v1_6 ; Handle minor version "v1.6.x"
FILE "$%PATH_OUT%\bin\additions\VBoxDrvInst.exe"
FILE "$%PATH_OUT%\bin\additions\VBoxVideo.inf"
FILE "$%PATH_OUT%\bin\additions\VBoxVideo.cat"
FILE "iexplore.ico"
; Because the next two lines will crash at the license page (??) we have to re-enable that here again
DetailPrint "Previous version: $g_strAddVerMaj.$g_strAddVerMin.$g_strAddVerBuild (Rev $g_strAddVerRev)"
; Auto-logon support (section is hidden at the moment -- only can be enabled via command line switch)
; Because the next two lines will crash at the license page (??) we have to re-enable that here again
; Another GINA already is installed? Check if this is ours, otherwise let the user decide (unless it's a silent setup)
${If} $0 != "VBoxGINA.dll"
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1 $(VBOX_COMPONENT_AUTOLOGON_WARN_3RDPARTY) /SD IDYES IDYES install
!insertmacro ReplaceDLL "$%PATH_OUT%\bin\additions\VBoxCredProv.dll" "$g_strSystemDir\VBoxCredProv.dll" "$INSTDIR"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}" "" "VBoxCredProv" ; adding to (default) key
WriteRegStr HKCR "CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}" "" "VBoxCredProv" ; adding to (Default) key
WriteRegStr HKCR "CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32" "" "VBoxCredProv.dll" ; adding to (Default) key
WriteRegStr HKCR "CLSID\{275D3BCC-22BB-4948-A7F6-3A3054EBA92B}\InprocServer32" "ThreadingModel" "Apartment"
!insertmacro ReplaceDLL "$%PATH_OUT%\bin\additions\VBoxGINA.dll" "$g_strSystemDir\VBoxGINA.dll" "$INSTDIR"
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon" "GinaDLL" "VBoxGINA.dll"
IfFileExists "$g_strSystemDir\takeown.exe" 0 +2
nsExec::ExecToLog '"$g_strSystemDir\takeown.exe" /F "$0"'
FILE "$%PATH_OUT%\bin\additions\libWine.dll"
FILE "$%PATH_OUT%\bin\additions\VBoxD3D8.dll"
FILE "$%PATH_OUT%\bin\additions\VBoxD3D9.dll"
FILE "$%PATH_OUT%\bin\additions\wined3d.dll"
IfFileExists "$g_strSystemDir\dllcache\msd3d8.dll" +1
IfFileExists "$g_strSystemDir\dllcache\msd3d9.dll" +1
Push "$g_strSystemDir\dllcache\d3d8.dll"
Push "$g_strSystemDir\dllcache\d3d9.dll"
!insertmacro InstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED "$%PATH_OUT%\bin\additions\d3d8.dll" "$g_strSystemDir\dllcache\d3d8.dll" "$TEMP"
!insertmacro InstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED "$%PATH_OUT%\bin\additions\d3d9.dll" "$g_strSystemDir\dllcache\d3d9.dll" "$TEMP"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED "$%PATH_OUT%\bin\additions\d3d8.dll" "$g_strSystemDir\dllcache\d3d8.dll" "$TEMP"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED "$%PATH_OUT%\bin\additions\d3d9.dll" "$g_strSystemDir\dllcache\d3d9.dll" "$TEMP"
IfFileExists "$g_strSystemDir\msd3d8.dll" +1
IfFileExists "$g_strSystemDir\msd3d8.dll" +1
Push "$g_strSystemDir\d3d8.dll"
Push "$g_strSystemDir\d3d9.dll"
!insertmacro InstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED "$%PATH_OUT%\bin\additions\d3d8.dll" "$g_strSystemDir\d3d8.dll" "$TEMP"
!insertmacro InstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED "$%PATH_OUT%\bin\additions\d3d9.dll" "$g_strSystemDir\d3d9.dll" "$TEMP"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED "$%PATH_OUT%\bin\additions\d3d8.dll" "$g_strSystemDir\d3d8.dll" "$TEMP"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED "$%PATH_OUT%\bin\additions\d3d9.dll" "$g_strSystemDir\d3d9.dll" "$TEMP"
FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\libWine.dll"
FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxD3D8.dll"
FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\VBoxD3D9.dll"
FILE "$%VBOX_PATH_ADDITIONS_WIN_X86%\wined3d.dll"
IfFileExists "$SYSDIR\dllcache\msd3d8.dll" +1
IfFileExists "$SYSDIR\dllcache\msd3d9.dll" +1
Push "$SYSDIR\dllcache\d3d8.dll"
Push "$SYSDIR\dllcache\d3d9.dll"
!insertmacro InstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d8.dll" "$SYSDIR\dllcache\d3d8.dll" "$TEMP"
!insertmacro InstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d9.dll" "$SYSDIR\dllcache\d3d9.dll" "$TEMP"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d8.dll" "$SYSDIR\dllcache\d3d8.dll" "$TEMP"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d9.dll" "$SYSDIR\dllcache\d3d9.dll" "$TEMP"
IfFileExists "$SYSDIR\dllcache\msd3d8.dll" +1
IfFileExists "$SYSDIR\dllcache\msd3d9.dll" +1
Push "$SYSDIR\d3d8.dll"
Push "$SYSDIR\d3d9.dll"
!insertmacro InstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d8.dll" "$SYSDIR\d3d8.dll" "$TEMP"
!insertmacro InstallLib DLL NOTSHARED NOREBOOT_NOTPROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d9.dll" "$SYSDIR\d3d9.dll" "$TEMP"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d8.dll" "$SYSDIR\d3d8.dll" "$TEMP"
!insertmacro InstallLib DLL NOTSHARED REBOOT_NOTPROTECTED "$%VBOX_PATH_ADDITIONS_WIN_X86%\d3d9.dll" "$SYSDIR\d3d9.dll" "$TEMP"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" "" "$INSTDIR\iexplore.ico"
FILE "$%PATH_TARGET%\uninst.exe"
WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
; If UNINSTALLER_ONLY is defined, we're only interested in uninst.exe
WriteUninstaller "$%PATH_TARGET%\uninst.exe"
Function un.onUninstSuccess
Function un.onInit
Call un.IsUserAdmin
Call un.GetWindowsVer
Call un.EnableLog
; Do *not* add this line in .onInit - it will crash at the license page (??) because of a weird NSIS bug.
Call un.Uninstall
Call un.UninstallInstDir