summaryrefslogtreecommitdiffstats
path: root/src/VBox/Installer/win/VirtualBox.wxs
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Installer/win/VirtualBox.wxs')
-rw-r--r--src/VBox/Installer/win/VirtualBox.wxs690
1 files changed, 690 insertions, 0 deletions
diff --git a/src/VBox/Installer/win/VirtualBox.wxs b/src/VBox/Installer/win/VirtualBox.wxs
new file mode 100644
index 00000000..9a4659f5
--- /dev/null
+++ b/src/VBox/Installer/win/VirtualBox.wxs
@@ -0,0 +1,690 @@
+<?xml version='1.0' encoding='windows-1252'?>
+<!--
+ VirtualBox Windows Installation Script (WiX)
+-->
+<!--
+ Copyright (C) 2014-2022 Oracle and/or its affiliates.
+
+ This file is part of VirtualBox base platform packages, as
+ available from https://www.virtualbox.org.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation, in version 3 of the
+ License.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <https://www.gnu.org/licenses>.
+
+ SPDX-License-Identifier: GPL-3.0-only
+-->
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
+ xmlns:difxapp="http://schemas.microsoft.com/wix/DifxAppExtension"
+ xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
+
+ <?include Defines.wxi ?>
+
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <!-- The merge module file names -->
+ <?define Property_VBoxMergeApp = "$(env.VBOX_WIN_INST_MERGE_APP)" ?>
+ <?if $(env.VBOX_WITH_32_ON_64_MAIN_API) = "yes" ?>
+ <?define Property_VBoxMergeCOM32On64 = "$(env.VBOX_WIN_INST_MERGE_COM32ON64)" ?>
+ <?endif ?>
+ <?if $(env.VBOX_WITH_USB) = "yes" ?>
+ <?define Property_VBoxMergeUSB = "$(env.VBOX_WIN_INST_MERGE_USB)" ?>
+ <?endif ?>
+ <?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
+ <?define Property_VBoxMergeNetworkFlt = "$(env.VBOX_WIN_INST_MERGE_NETFLT)" ?>
+ <?endif ?>
+ <?if $(env.VBOX_WITH_NETADP) = "yes" ?>
+ <?define Property_VBoxMergeNetworkAdp = "$(env.VBOX_WIN_INST_MERGE_NETADP)" ?>
+ <?define Property_VBoxMergeNetworkAdp6 = "$(env.VBOX_WIN_INST_MERGE_NETADP6)" ?>
+ <?endif ?>
+ <?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
+ <?define Property_VBoxMergeNetworkLwf = "$(env.VBOX_WIN_INST_MERGE_NETLWF)" ?>
+ <?endif ?>
+ <?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
+ <?define Property_VBoxMergePython = "$(env.VBOX_WIN_INST_MERGE_PYTHON)" ?>
+ <?endif ?>
+<?endif ?>
+
+ <Product Id="*"
+ UpgradeCode="C4BAD770-BFE8-4D2C-A592-693028A7215B"
+ Name="$(env.VBOX_PRODUCT) $(env.VBOX_VERSION_STRING)"
+ Language="!(loc.LANG)"
+ Codepage="1252"
+ Version="$(var.Property_Version)"
+ Manufacturer="$(env.VBOX_VENDOR)">
+
+ <Package Id="*"
+ Keywords="Installer"
+ Description="$(env.VBOX_PRODUCT) $(var.Property_VersionExt) installation package"
+ Comments="$(env.VBOX_PRODUCT) installation package"
+ Compressed="yes"
+ Manufacturer="$(env.VBOX_VENDOR)"
+ InstallerVersion="200"
+ InstallPrivileges="elevated"
+ Platform="$(var.Property_Platform)"/>
+
+ <?include CommonProperties.wxi ?>
+
+ <!-- Global properties -->
+ <Property Id="ARPPRODUCTICON">IconVirtualBox</Property>
+ <Property Id="ARPURLINFOABOUT">http://www.virtualbox.org</Property>
+ <Property Id="ARPURLUPDATEINFO">http://www.virtualbox.org</Property>
+
+ <Property Id="NETWORKTYPE" Value="NDIS6" Secure="yes"/>
+
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "no" ?>
+ <!-- Force NDIS5 on pre-Vista -->
+ <SetProperty Id="NETWORKTYPE" After="LaunchConditions" Value="NDIS5"><![CDATA[(VersionNT < 600)]]></SetProperty>
+<?endif ?>
+
+ <!-- Whether or not registering of known desktop shortcut for the Quick Launch Bar should be created -->
+ <Property Id="VBOX_REGISTERFILEEXTENSIONS" Value="1" Secure="yes"/>
+
+ <SetProperty Id="VBOX_REGISTERFILEEXTENSIONS" After="AppSearch" Sequence="both" Value="{}">
+ <![CDATA[VBOX_REGISTERFILEEXTENSIONS="0"]]>
+ </SetProperty>
+
+ <!-- Install the product for all users on the system -->
+ <Property Id="ALLUSERS"><![CDATA[1]]></Property>
+
+ <!-- Force overwriting all files and re-create shortcuts to guarantee a working environment -->
+ <Property Id='REINSTALLMODE' Value='amus'/>
+
+ <?include PublicProperties.wxi ?>
+
+ <!-- Make sure installation will not start on anything other but the NT family -->
+<?if $(env.KBUILD_TARGET_ARCH) = "amd64" ?>
+ <Condition Message="!(loc.Only64Bit)">
+ VersionNT64
+ </Condition>
+<?else ?>
+ <Condition Message="!(loc.Only32Bit)">
+ NOT VersionNT64
+ </Condition>
+
+ <Condition Message="!(loc.WrongOS)">
+ NOT VersionNT=500 AND NOT Version9X AND NOT VersionNT64
+ </Condition>
+
+<?endif ?>
+
+ <Condition Message="!(loc.NeedAdmin)">
+ Privileged
+ </Condition>
+
+<?if $(env.VBOX_WITH_CRT_PACKING) = "no" ?>
+ <!-- Check if we have the required MS CRT(s) installed when we're not shipping those. -->
+ <Condition Message="!(loc.NeedMSCRT)">
+ Installed OR (VBOX_MSCRT_INSTALLED)
+ </Condition>
+<?endif ?>
+
+ <!-- Detect old innotek installation -->
+ <!-- Force a manual uninstall of an already installed innotek VirtualBox version first -->
+ <Property Id="VBOXINNOTEK">
+ <RegistrySearch Id="RegSearchInnotekVersion" Root="HKLM" Key="SOFTWARE\Innotek\VirtualBox" Name="Version" Type="raw" Win64="$(var.Property_Win64)"/>
+ </Property>
+ <Condition Message="!(loc.InnotekFound)">
+ NOT VBOXINNOTEK
+ </Condition>
+
+
+ <!-- *************************** Upgrade packages only ******************************* -->
+ <!-- Minimum and Maximum specify the range of versions we are supposed to update with this upgrade.
+ IncludeMaximum and IncludeMinimum specify whether the bound value is actually included in the range or not
+ (IncludeMaximum = yes meaning to find versions below or equal to the version specified in Maximum while
+ IncludeMaximum = no only finds those below the Maximum).
+ OnlyDetect tells the installer not to remove the previous product. This is useful as long as we
+ only change files in the package -->
+
+ <Upgrade Id="C4BAD770-BFE8-4D2C-A592-693028A7215B"> <!-- Upgrade of Sun xVM VirtualBox >= v1.6.0 -->
+
+ <!-- Upgrade is flagged if current-install is newer than or equal to package - TODO: should make a dialog appear asking user to confirm downgrade -->
+ <!-- Setting "OnlyDetect" to "no" makes the installer uninstall an already newer installed version -->
+ <UpgradeVersion Property="NEWERVERSIONDETECTED" Minimum="$(var.Property_Version)" IncludeMinimum="no" OnlyDetect="no" />
+
+ <!-- Flag is set if the install will trigger an upgrade of an existing install -->
+ <UpgradeVersion Property="PREVIOUSVERSIONSINSTALLED" Minimum="1.0.0.0" Maximum="$(var.Property_Version)" IncludeMaximum="yes" />
+
+ </Upgrade>
+
+ <!-- The product's icon table -->
+ <Icon Id="IconVirtualBox" SourceFile="$(env.VBOX_WINDOWS_ICON_FILE)" />
+
+ <!-- The media/binary IDs -->
+ <!--
+ The effects of CompressionLevel options:
+ default/mszip, high: 32.54s
+ -rw-rw-rw- 1 bird 0 53 591 221 2016-09-25 03:56 common.cab
+ -rw-rw-rw- 1 bird 0 41 560 082 2016-09-25 03:56 VirtualBox-5.1.51-r110887_en_US.msi
+ high, high: 46.76s
+ -rw-rw-rw- 1 bird 0 53 591 221 2016-09-25 03:49 common.cab
+ -rw-rw-rw- 1 bird 0 34 056 210 2016-09-25 03:49 VirtualBox-5.1.51-r110887_en_US.msi
+ medium, medium: 29.95s
+ -rw-rw-rw- 1 bird 0 56 293 089 2016-09-25 03:53 common.cab
+ -rw-rw-rw- 1 bird 0 35 498 002 2016-09-25 03:54 VirtualBox-5.1.51-r110887_en_US.msi
+ low, low: 25.41s
+ -rw-rw-rw- 1 bird 0 57 616 155 2016-09-25 03:52 common.cab
+ -rw-rw-rw- 1 bird 0 37 181 458 2016-09-25 03:52 VirtualBox-5.1.51-r110887_en_US.msi
+ mszip/default, mszip/default: 16.13s
+ -rw-rw-rw- 1 bird 0 58 751 954 2016-09-25 03:49 common.cab
+ -rw-rw-rw- 1 bird 0 41 560 082 2016-09-25 03:50 VirtualBox-5.1.51-r110887_en_US.msi
+ none, none: 2.37s
+ -rw-rw-rw- 1 bird 0 92 470 301 2016-09-25 03:47 common.cab
+ -rw-rw-rw- 1 bird 0 135 874 578 2016-09-25 03:47 VirtualBox-5.1.51-r110887_en_US.msi
+
+ We set the level in the VBOX_CAB_COMPRESSION_LEVEL and VBOX_CAB_COMPRESSION_LEVEL_COMMON
+ environment variables so we don't waste time compressing and decompressing the intermediate
+ language MSIs and the common.cab that we're not going to use (x86).
+ -->
+ <Media Id="1" Cabinet="product.cab" EmbedCab="yes" CompressionLevel="$(env.VBOX_CAB_COMPRESSION_LEVEL)" />
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "no" ?>
+ <?if $(env.VBOX_WITH_COMBINED_PACKAGE) = "yes" ?>
+ <Media Id="2" Cabinet="common.cab" EmbedCab="no" CompressionLevel="$(env.VBOX_CAB_COMPRESSION_LEVEL_COMMON)" />
+ <?endif ?>
+<?endif ?>
+ <Binary Id="VBoxInstallHelper" SourceFile="$(env.PATH_OUT)\bin\VBoxInstallHelper.dll" />
+
+ <!-- Custom actions -->
+
+ <!-- Figure out where a previous installation was, if any -->
+<?if $(env.KBUILD_TARGET_ARCH) = "amd64" ?>
+ <CustomAction Id="ca_OriginalTargetDir" Execute="firstSequence" Property="INSTALLDIR"
+ Value="[ProgramFiles64Folder]\$(env.VBOX_VENDOR_SHORT)\VirtualBox" />
+
+ <Property Id="EXISTINGINSTALLDIR" Secure="yes">
+ <RegistrySearch Id="RegistryGetInstallPath" Root="HKLM" Key="$(var.Property_RegKey)" Name="InstallDir"
+ Type="raw" Win64="$(var.Property_Win64)"/>
+ </Property>
+ <CustomAction Id="ca_DefaultTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[EXISTINGINSTALLDIR]" />
+<?else ?>
+ <CustomAction Id="ca_OriginalTargetDir" Execute="firstSequence" Property="INSTALLDIR"
+ Value="[ProgramFilesFolder]\$(env.VBOX_VENDOR_SHORT)\VirtualBox" />
+
+ <Property Id="EXISTINGINSTALLDIR" Secure="yes">
+ <RegistrySearch Id="RegistryGetInstallPath" Root="HKLM" Key="$(var.Property_RegKey)" Name="InstallDir"
+ Type="raw" Win64="$(var.Property_Win64)"/>
+ </Property>
+ <CustomAction Id="ca_DefaultTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[EXISTINGINSTALLDIR]" />
+<?endif ?>
+ <CustomAction Id="ca_UninstallTAPInstances" BinaryKey="VBoxInstallHelper"
+ DllEntry="UninstallTAPInstances" Execute="deferred" Return="check" Impersonate="no"/>
+
+ <CustomAction Id="ca_UninstallVBoxDrv" BinaryKey="VBoxInstallHelper"
+ DllEntry="UninstallVBoxDrv" Execute="deferred" Return="ignore" Impersonate="no"/>
+
+ <Property Id="VBOXDEPENDENCY" Secure="yes">
+ <DirectorySearch Id="VBoxInstallDir" Path="[EXISTINGINSTALLDIR]">
+ <FileSearch Name="dependency.dep"/>
+ </DirectorySearch>
+ </Property>
+
+<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
+ <Property Id="EXISTING_PYTHON_API_FOLDER" Secure="yes" >
+ <RegistrySearch Id="RegistryGetPythonApiInstallPath" Root="HKLM" Key="$(var.Property_RegKey)"
+ Name="PythonApiInstallDir" Type="raw" Win64="$(var.Property_Win64)"/>
+ </Property>
+<?endif ?>
+
+ <!--
+ install upgrade uninstall
+ VBOXDEPENDENCY 0 1/0 1/0
+ UPGRADINGPRODUCTCODE 0 1 0
+ final 0 1 0
+ not final 1 0 1
+ -->
+
+ <Condition Message="It was detected an application which has been using currently installed VirtualBox version.
+ You must remove this application before continuing installation.
+ See the file dependency.dep in the VirtualBox installation directory for details. ">
+ NOT (VBOXDEPENDENCY AND UPGRADINGPRODUCTCODE)
+ </Condition>
+
+ <!-- Detect old Sun installation -->
+ <!-- Force a manual uninstall of an already installed Sun VirtualBox version first -->
+ <!--<Property Id="VBOXSUN">
+ <RegistrySearch Id="RegSearchSunVersion" Root="HKLM" Key="SOFTWARE\Sun\VirtualBox" Name="Version" Type="raw" Win64="$(var.Property_Win64)"/>
+ </Property>
+ <Condition Message="!(loc.SunFound)">
+ NOT VBOXSUN
+ </Condition>-->
+
+ <!-- Note: Only if we include FE/Qt, we offer to start VirtualBox at the end of a successful installation. -->
+<?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
+ <!-- Note: Make sure to set the CWD (via 'Directory' attribute) to not run off a possibly temporary directory or some such (see @bugref{10203}). -->
+ <CustomAction Id="ca_StartVBox" Directory="INSTALLDIR" ExeCommand="[INSTALLDIR]VirtualBox.exe" Return="asyncNoWait" Impersonate="yes" />
+<?endif ?>
+
+ <CustomAction Id="ca_CheckSerial" BinaryKey="VBoxInstallHelper" DllEntry="CheckSerial" Impersonate="no"/>
+
+ <CustomAction Id="ca_InstallBranding" BinaryKey="VBoxInstallHelper" DllEntry="InstallBranding" Execute="deferred" Return="check" Impersonate="no"/>
+ <CustomAction Id="ca_InstallBrandingArgs" Property="ca_InstallBranding" Value="[INSTALLDIR]" Execute="immediate"/>
+
+ <CustomAction Id="ca_UninstallBranding" BinaryKey="VBoxInstallHelper" DllEntry="UninstallBranding" Execute="deferred" Return="check" Impersonate="no"/>
+ <CustomAction Id="ca_UninstallBrandingArgs" Property="ca_UninstallBranding" Value="[INSTALLDIR]" Execute="immediate"/>
+
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "no" ?>
+ <?include VBoxMergeAppCA.wxi ?>
+ <?if $(env.VBOX_WITH_32_ON_64_MAIN_API) = "yes" ?>
+ <?include VBoxMergeCOM32On64CA.wxi ?>
+ <?endif ?>
+ <?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
+ <?include VBoxMergeNetFltCA.wxi ?>
+ <?include VBoxMergeNetLwfCA.wxi ?>
+ <?endif ?>
+ <?include VBoxMergeNetAdpCA.wxi ?>
+ <?include VBoxMergeNetAdp6CA.wxi ?>
+ <?include VBoxMergeUSBCA.wxi ?>
+ <?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
+ <?include VBoxMergePythonCA.wxi ?>
+ <?endif ?>
+<?endif ?>
+
+ <Directory Id="TARGETDIR" Name="SourceDir">
+ <Directory Id="$(var.Property_ProgramFiles)" Name="PFiles">
+ <Directory Id="VENDOR" Name="$(env.VBOX_VENDOR_SHORT)">
+ <Directory Id="INSTALLDIR" Name="VirtualBox">
+ <!-- Components for removing empty folder after cleaning traces -->
+ <Component Id="cp_INSTALLDIR" Guid="374723AF-5990-4552-A1B0-82C72EFA360F">
+ <RemoveFolder Id="INSTALLDIR" On="uninstall" />
+ </Component>
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <Merge Id="msm_VBoxApp" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeApp)" DiskId="1">
+ <ConfigurationData Name="argRegisterExtensions" Value="[VBOX_REGISTERFILEEXTENSIONS]"/>
+ </Merge>
+ <?if $(env.VBOX_WITH_32_ON_64_MAIN_API) = "yes" ?>
+ <Merge Id="msm_VBoxCOM32On64" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeCOM32On64)" DiskId="1" />
+ <?endif ?>
+<?else ?>
+ <Directory Id="msm_VBoxApplicationFolder" FileSource=".">
+ <?include VBoxMergeApp.wxi ?>
+ <?if $(env.VBOX_WITH_32_ON_64_MAIN_API) = "yes" ?>
+ <?include VBoxMergeCOM32On64.wxi ?>
+ <?endif ?>
+ </Directory>
+<?endif ?>
+ <Directory Id="dir_Drivers" Name="drivers">
+<?if $(env.VBOX_WITH_USB) = "yes" ?>
+ <Directory Id="dir_USB" Name="USB">
+ <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <Merge Id="msm_VBoxUSB" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeUSB)" DiskId="1" />
+ <?else ?>
+ <Directory Id="msm_VBoxUSBFolder" FileSource=".">
+ <?include VBoxMergeUSB.wxi ?>
+ </Directory>
+ <?endif ?>
+ </Directory>
+<?endif ?>
+ <Directory Id="dir_Network" Name="network">
+<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
+ <Directory Id="dir_NetFlt" Name="netflt">
+ <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <Merge Id="msm_VBoxNetworkFlt" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeNetworkFlt)" DiskId="1">
+ <ConfigurationData Name="passedNetworkType" Value="[NETWORKTYPE]"/>
+ </Merge>
+ <?else ?>
+ <Directory Id="msm_VBoxNetworkFltFolder" FileSource=".">
+ <?include VBoxMergeNetFlt.wxi ?>
+ </Directory>
+ <?endif ?>
+ </Directory>
+<?endif ?>
+<?if $(env.VBOX_WITH_NETADP) = "yes" ?>
+ <Directory Id="dir_NetAdp" Name="netadp">
+ <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <Merge Id="msm_VBoxNetworkAdp" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeNetworkAdp)" DiskId="1">
+ <ConfigurationData Name="passedNetworkType" Value="[NETWORKTYPE]"/>
+ </Merge>
+ <?else ?>
+ <Directory Id="msm_VBoxNetworkAdpFolder" FileSource=".">
+ <?include VBoxMergeNetAdp.wxi ?>
+ </Directory>
+ <?endif ?>
+ </Directory>
+<?endif ?>
+
+<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
+ <Directory Id="dir_NetLwf" Name="netlwf">
+ <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <Merge Id="msm_VBoxNetworkLwf" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeNetworkLwf)" DiskId="1">
+ <ConfigurationData Name="passedNetworkType" Value="[NETWORKTYPE]"/>
+ </Merge>
+ <?else ?>
+ <Directory Id="msm_VBoxNetworkLwfFolder" FileSource=".">
+ <?include VBoxMergeNetLwf.wxi ?>
+ </Directory>
+ <?endif ?>
+ </Directory>
+<?endif ?>
+
+<?if $(env.VBOX_WITH_NETADP) = "yes" ?>
+ <Directory Id="dir_NetAdp6" Name="netadp6">
+ <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <Merge Id="msm_VBoxNetworkAdp6" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergeNetworkAdp6)" DiskId="1">
+ <ConfigurationData Name="passedNetworkType" Value="[NETWORKTYPE]"/>
+ </Merge>
+ <?else ?>
+ <Directory Id="msm_VBoxNetworkAdp6Folder" FileSource=".">
+ <?include VBoxMergeNetAdp6.wxi ?>
+ </Directory>
+ <?endif ?>
+ </Directory>
+<?endif ?>
+ </Directory>
+ </Directory>
+ <Directory Id="dir_SDK" Name="sdk">
+<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
+ <Directory Id="dir_SDKInstall" Name="install">
+ <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <Merge Id="msm_VBoxPython" Language="!(loc.LANG)" SourceFile="$(var.Property_VBoxMergePython)" DiskId="1" />
+ <?else ?>
+ <Directory Id="msm_VBoxPythonFolder" FileSource=".">
+ <?include VBoxMergePython.wxi ?>
+ </Directory>
+ <?endif ?>
+ </Directory>
+<?endif ?>
+ <!-- Component for removing empty folder after cleaning traces -->
+ <Component Id="cp_SDK" Guid="ACA59290-B2D6-4E96-B164-C45F70A90219">
+ <RemoveFolder Id="dir_SDK" On="uninstall" />
+ </Component>
+ </Directory>
+
+<?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
+ <!-- Set up special directory IDs for referencing to the start menu
+ or the Quick Launch bar.
+ See: http://msdn.microsoft.com/en-us/library/aa368276.aspx
+ http://wix.mindcapers.com/wiki/Shortcuts_in_WiX -->
+ <Directory Id="ProgramMenuFolder">
+ <Directory Id="dir_StartMenuVBox" Name="$(env.VBOX_PRODUCT)"/>
+ </Directory>
+
+ <Directory Id="DesktopFolder" Name="Desktop"/>
+
+ <Directory Id="AppDataFolder" Name="AppData">
+ <Directory Id="dir_AppDataMicrosoft" Name="Microsoft">
+ <Directory Id="dir_AppDataMSIE" Name="Internet Explorer">
+ <Directory Id="dir_QuicklaunchFolder" Name="Quick Launch"/>
+ </Directory>
+ </Directory>
+ </Directory>
+
+ <!-- Start menu entries. -->
+ <Component Id="cp_StartMenuVBox" Guid="C2DC321A-CE63-40EE-8A98-724DF8BD12FB" Win64="$(var.Property_Win64)">
+ <Condition>VBOX_INSTALLSTARTMENUENTRIES</Condition>
+ <Shortcut Id="sc_StartMenuVBox" Directory="dir_StartMenuVBox" Name="$(env.VBOX_PRODUCT)" Description="$(env.VBOX_PRODUCT)"
+ Target="[INSTALLDIR]VirtualBox.exe" WorkingDirectory="INSTALLDIR"/>
+ <RegistryValue Root="HKCU" Key="$(var.Property_RegKeyInstall)"
+ Type="string" Value="installed" KeyPath="yes" />
+ <?include $(env.PATH_TARGET)\Shortcuts_StartMenu.wxi ?>
+ </Component>
+
+ <!-- Desktop shortcut. -->
+ <Component Id="cp_DesktopShortcut" Guid="668F8A1A-F5CE-48B3-BB1A-3042EE27B279" Win64="$(var.Property_Win64)">
+ <Condition>VBOX_INSTALLDESKTOPSHORTCUT</Condition>
+ <Shortcut Id="sc_DesktopVBox" Directory="DesktopFolder" Name="$(env.VBOX_PRODUCT)" Description="$(env.VBOX_PRODUCT)"
+ Target="[INSTALLDIR]VirtualBox.exe" WorkingDirectory="INSTALLDIR"/>
+ <RegistryValue Root="HKCU" Key="$(var.Property_RegKeyInstall)" Type="string"
+ Value="installed" KeyPath="yes" />
+ </Component>
+
+ <!-- QuickLaunch shortcut. -->
+ <Component Id="cp_QuickLaunchVBox" Guid="CC19E026-938A-41CB-8E77-3F33296244B6" Win64="$(var.Property_Win64)">
+ <CreateFolder/>
+ <Condition>VBOX_INSTALLQUICKLAUNCHSHORTCUT</Condition>
+ <Shortcut Id="sc_QuickLaunchVBox" Directory="dir_QuicklaunchFolder" Name="$(env.VBOX_PRODUCT)" Description="$(env.VBOX_PRODUCT)"
+ Target="[INSTALLDIR]VirtualBox.exe" WorkingDirectory="INSTALLDIR"/>
+ <RegistryValue Root="HKCU" Key="$(var.Property_RegKeyInstall)"
+ Type="string" Value="installed" KeyPath="yes" />
+ </Component>
+<?endif ?>
+ </Directory>
+ </Directory>
+ </Directory>
+ </Directory> <!-- TARGETDIR -->
+
+ <!-- Note: Feature IDs *must not* be renamed to use any prefixes or such,
+ otherwise this will break manual selection using the ADDLOCAL= syntax
+ when using the command line / scripts (see VBox manual). -->
+ <Feature Id="VBoxApplication" Title="VirtualBox Application" Level="1"
+ Description="!(loc.VB_App)"
+ ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand"
+ Absent="disallow" AllowAdvertise="no" >
+
+<?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
+ <!-- Components which are handled only by this installer itself -->
+ <ComponentRef Id="cp_StartMenuVBox" />
+ <ComponentRef Id="cp_DesktopShortcut" />
+ <ComponentRef Id="cp_QuickLaunchVBox" />
+<?endif ?>
+ <!-- Components for removing empty folders after cleaning traces -->
+ <ComponentRef Id="cp_INSTALLDIR" />
+ <ComponentRef Id="cp_SDK" />
+
+ <!-- Components handled either by the installer itself or
+ the merge module -->
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <MergeRef Id="msm_VBoxApp" />
+ <?if $(env.VBOX_WITH_32_ON_64_MAIN_API) = "yes" ?>
+ <MergeRef Id="msm_VBoxCOM32On64" />
+ <?endif ?>
+<?else ?>
+ <!-- Make sure to reference the permissions component, which takes care of setting
+ the required ACLs for our files / folders. -->
+ <ComponentRef Id="cp_Permissions" />
+ <?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
+ <ComponentRef Id="cp_RegisterExtensions" />
+ <?endif ?>
+ <?if $(env.VBOX_WITH_DOCS_PACKING) = "yes" ?>
+ <ComponentRef Id="cp_Docs" />
+ <?endif ?>
+ <?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
+ <ComponentRef Id="cp_NLS" />
+ <?endif ?>
+ <?if $(env.VBOX_WITH_32_ON_64_MAIN_API) = "yes" ?>
+ <ComponentRef Id="cp_MainCOM_x86" />
+ <?endif ?>
+ <ComponentRef Id="cp_MainCOM" />
+ <?if $(env.VBOX_WITH_SDS) = "yes" ?>
+ <ComponentRef Id="cp_VBoxSDS" />
+ <?endif ?>
+ <?if $(env.VBOX_WITH_MIDL_PROXY_STUB) = "yes" ?>
+ <ComponentRef Id="cp_ProxyStub" />
+ <ComponentRef Id="cp_ProxyStubLegacy" />
+ <?endif?>
+ <ComponentRef Id="cp_MainBinaries" />
+ <?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
+ <ComponentRef Id="cp_QtPlatforms" />
+ <ComponentRef Id="cp_QtSqldrivers" />
+ <ComponentRef Id="cp_QtStyles" />
+ <?endif ?>
+ <?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
+ <ComponentRef Id="cp_VBoxPyInst" />
+ <ComponentRef Id="cp_VBoxPyMod" />
+ <ComponentRef Id="cp_VBoxPyDel" />
+ <?endif ?>
+ <?if $(env.VBOX_WITH_VBOXSDL) = "yes" ?>
+ <ComponentRef Id="cp_VBoxSDLBinaries" />
+ <?endif ?>
+ <?if $(env.VBOX_WITH_WEBSERVICES) = "yes" ?>
+ <ComponentRef Id="cp_VBoxWebService" />
+ <?endif ?>
+ <ComponentRef Id="cp_VBoxCAPI" />
+ <?if $(env.VBOX_WITH_UNATTENDED) = "yes" ?>
+ <!-- unattended template component -->
+ <ComponentRef Id="cp_UnattendedTemplates" />
+ <?endif ?>
+ <?if $(env.VBOX_SIGNING_MODE) != none ?>
+ <ComponentRef Id="cp_VBoxSupCat_PreW10" />
+ <ComponentRef Id="cp_VBoxSupCat_W10" />
+ <?endif ?>
+ <ComponentRef Id="cp_VBoxSup" />
+<?endif ?>
+
+<?if $(env.VBOX_WITH_USB) = "yes" ?>
+ <Feature Id="VBoxUSB" Title="VirtualBox USB Support" Level="1"
+ Description="!(loc.VB_USBDriver)"
+ ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand"
+ Absent="allow" AllowAdvertise="no" >
+ <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <MergeRef Id="msm_VBoxUSB" />
+ <?else ?>
+ <?if $(env.VBOX_SIGNING_MODE) != none ?>
+ <ComponentRef Id="cp_USBFilterDriverCat_PreW10" />
+ <ComponentRef Id="cp_USBFilterDriverCat_W10" />
+ <?endif ?>
+ <ComponentRef Id="cp_USBFilterDriver" />
+ <?if $(env.VBOX_SIGNING_MODE) != none ?>
+ <ComponentRef Id="cp_USBDeviceDriverCat_PreW10" />
+ <ComponentRef Id="cp_USBDeviceDriverCat_W10" />
+ <?endif ?>
+ <ComponentRef Id="cp_USBDeviceDriver" />
+ <?endif ?>
+ </Feature>
+<?endif ?>
+
+<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
+ <Feature Id="VBoxNetwork" Title="VirtualBox Networking" Level="1"
+ Description="!(loc.VB_Network)"
+ ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand"
+ Absent="allow" AllowAdvertise="no" >
+ <Feature Id="VBoxNetworkFlt" Title="VirtualBox Bridged Networking" Level="1"
+ Description="!(loc.VB_NetFltDriver)"
+ ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand"
+ Absent="allow" AllowAdvertise="no" >
+ <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <MergeRef Id="msm_VBoxNetworkFlt" />
+ <MergeRef Id="msm_VBoxNetworkLwf" />
+ <?else ?>
+ <ComponentRef Id="cp_NetFltDriver" />
+ <?if $(env.VBOX_SIGNING_MODE) != none ?>
+ <ComponentRef Id="cp_NetLwfDriverCat_PreW10" />
+ <ComponentRef Id="cp_NetLwfDriverCat_W10" />
+ <?endif ?>
+ <ComponentRef Id="cp_NetLwfDriver" />
+ <?endif ?>
+ </Feature>
+ <Feature Id="VBoxNetworkAdp" Title="VirtualBox Host-Only Networking" Level="1"
+ Description="!(loc.VB_NetAdpDriver)"
+ ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand"
+ Absent="allow" AllowAdvertise="no" >
+ <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <MergeRef Id="msm_VBoxNetworkAdp" />
+ <MergeRef Id="msm_VBoxNetworkAdp6" />
+ <?else ?>
+ <ComponentRef Id="cp_NetAdpDriver" />
+ <?if $(env.VBOX_SIGNING_MODE) != none ?>
+ <ComponentRef Id="cp_NetAdp6DriverCat_PreW10" />
+ <ComponentRef Id="cp_NetAdp6DriverCat_W10" />
+ <?endif ?>
+ <ComponentRef Id="cp_NetAdp6Driver" />
+ <?endif ?>
+ </Feature>
+
+ </Feature>
+<?endif ?>
+
+<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
+ <Feature Id="VBoxPython" Title="VirtualBox Python Support" Level="1"
+ Description="!(loc.VB_Python)"
+ ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand"
+ Absent="allow" AllowAdvertise="no" >
+ <?if $(env.VBOX_WITH_MSM_INSTALL) = "yes" ?>
+ <MergeRef Id="msm_VBoxPython" />
+ <?else ?>
+ <ComponentRef Id="cp_VBoxPythonBinding" />
+ <?endif ?>
+ </Feature>
+<?endif ?>
+ </Feature>
+
+ <!-- Include user interface definition -->
+ <?include UserInterface.wxi ?>
+
+ <InstallExecuteSequence>
+
+ <!--
+ To debug the action sequences, do: "msiexec /i <VBox.msi> /lar <Logfile>"
+
+ InstallUISequence (client side) is:
+ AppSearch
+ LaunchConditions
+ ValidateProductID
+ CostInitialize
+ FileCost
+ CostFinalize
+ ExecuteAction -> will pass control over to "InstallExecuteSequence"
+
+ The first six actions above will be repeated but skipped on the server
+ side if already run on the client side.
+
+ InstallExecuteSequence (server side) is:
+ <First six action from InstallUISequence>
+ .
+ InstallInitialize
+ .
+ InstallFinalize
+
+ The actions between InstallInitialize and InstallFinalize will be gone through twice:
+ - The first time the installer creates an installation script containing all actions in the right
+ sequence which need to get executed in a batch later. At this point the launch conditions for
+ custom actions must be met already!
+ - The second time the generated installation script will be run as-is.
+
+ Also, the InstallUISequence and InstallExecuteSequence tables run in different sessions which
+ need public properties (that is, UPPERCASE properties).
+ -->
+
+ <!-- AppSearch must be done before "RemoveExistingProducts" and before "FindRelatedProducts" -->
+ <AppSearch Sequence="1"></AppSearch>
+ <LaunchConditions After="AppSearch" />
+
+ <!-- First install the new version and then remove the old version. This is more efficient -->
+ <RemoveExistingProducts After="InstallValidate"><![CDATA[PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED]]></RemoveExistingProducts>
+
+ <Custom Action="ca_OriginalTargetDir" After="FileCost"><![CDATA[(NOT INSTALLDIR)]]></Custom>
+ <Custom Action="ca_DefaultTargetDir" Before="FileCost" ><![CDATA[NOT INSTALLDIR AND EXISTINGINSTALLDIR]]></Custom>
+
+ <!-- Check + unininstall old TAP instances - we don't need them anymore -->
+ <Custom Action="ca_UninstallTAPInstances" Before="InstallFiles" >1</Custom>
+
+ <!-- Check + uninstall old VBoxDrv service - it was renamed to VBoxSup. -->
+ <Custom Action="ca_UninstallVBoxDrv" Before="InstallFiles" >1</Custom>
+
+ <Custom Action="ca_InstallBrandingArgs" Before="ca_InstallBranding" ><![CDATA[NOT REMOVE]]></Custom>
+ <Custom Action="ca_InstallBranding" Before="InstallFinalize" ><![CDATA[NOT REMOVE]]></Custom>
+
+ <!-- Uninstall branding on complete uninstall, not on update -->
+ <Custom Action="ca_UninstallBrandingArgs" Before="ca_UninstallBranding" ><![CDATA[(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")]]></Custom>
+ <Custom Action="ca_UninstallBranding" Before="InstallFinalize" ><![CDATA[(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")]]></Custom>
+
+<?if $(env.VBOX_WITH_MSM_INSTALL) = "no" ?>
+ <?include VBoxMergeAppSeq.wxi ?>
+ <?if $(env.VBOX_WITH_32_ON_64_MAIN_API) = "yes" ?>
+ <?include VBoxMergeCOM32On64Seq.wxi ?>
+ <?endif ?>
+ <?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
+ <?include VBoxMergeNetFltSeq.wxi ?>
+ <?include VBoxMergeNetLwfSeq.wxi ?>
+ <?endif ?>
+ <?include VBoxMergeNetAdpSeq.wxi ?>
+ <?include VBoxMergeNetAdp6Seq.wxi ?>
+ <?include VBoxMergeUSBSeq.wxi ?>
+ <?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
+ <?include VBoxMergePythonSeq.wxi ?>
+ <?endif ?>
+<?endif ?>
+
+ </InstallExecuteSequence>
+
+ </Product>
+</Wix>