summaryrefslogtreecommitdiff
path: root/src/VBox/Installer
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Installer')
-rw-r--r--src/VBox/Installer/Makefile.kmk2
-rw-r--r--src/VBox/Installer/common/Makefile.kmk4
-rw-r--r--src/VBox/Installer/common/virtualbox.xml28
-rw-r--r--src/VBox/Installer/darwin/Makefile.kmk6
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/darwin/VirtualBox/postflight0
-rw-r--r--src/VBox/Installer/freebsd/Makefile.kmk2
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/freebsd/postdeinstall.sh0
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/freebsd/postinstall.sh0
-rw-r--r--src/VBox/Installer/linux/Makefile.include.footer92
-rw-r--r--src/VBox/Installer/linux/Makefile.include.header158
-rw-r--r--src/VBox/Installer/linux/Makefile.kmk49
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/linux/VBox.sh0
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/linux/VBoxCreateUSBNode.sh22
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/linux/VBoxSysInfo.sh0
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/linux/deffiles1
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/linux/install.sh41
-rw-r--r--src/VBox/Installer/linux/installer-utils.sh114
-rw-r--r--src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec48
-rwxr-xr-xsrc/VBox/Installer/linux/rpm/rules8
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/linux/run-inst.sh0
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/linux/runasroot.sh2
-rw-r--r--src/VBox/Installer/linux/sh-utils.sh2
-rw-r--r--src/VBox/Installer/linux/testcase/Makefile.kmk40
-rw-r--r--src/VBox/Installer/linux/testcase/tstInstaller.sh66
-rw-r--r--src/VBox/Installer/linux/testcase/tstInstallerLinux.sh88
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/linux/uninstall.sh0
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/linux/vboxballoonctrl-service.sh.in0
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/linux/vboxdrv.sh.in33
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/linux/vboxweb-service.sh.in0
-rw-r--r--src/VBox/Installer/solaris/Makefile.kmk11
-rw-r--r--src/VBox/Installer/solaris/VBoxISAExec.c2
-rw-r--r--src/VBox/Installer/solaris/VBoxZoneAccess.c2
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/solaris/checkinstall.sh0
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/solaris/makepackage.sh4
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/solaris/pkginstall.sh0
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/solaris/postinstall.sh0
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/solaris/preremove.sh0
-rwxr-xr-xsrc/VBox/Installer/solaris/smf-vboxballoonctrl.sh2
-rwxr-xr-xsrc/VBox/Installer/solaris/smf-vboxwebsrv.sh2
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/solaris/vbi/makepackage.sh0
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/solaris/vbi/preremove.sh0
-rw-r--r--[-rwxr-xr-x]src/VBox/Installer/solaris/vboxconfig.sh271
-rw-r--r--src/VBox/Installer/solaris/virtualbox.applications.in2
-rw-r--r--src/VBox/Installer/solaris/virtualbox.keys39
-rw-r--r--src/VBox/Installer/solaris/virtualbox.mime12
-rw-r--r--src/VBox/Installer/win/InstallHelper/Makefile.kmk10
-rw-r--r--src/VBox/Installer/win/InstallHelper/VBoxCommon.cpp3
-rw-r--r--src/VBox/Installer/win/InstallHelper/VBoxCommon.h2
-rw-r--r--src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp857
-rw-r--r--src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def2
-rw-r--r--src/VBox/Installer/win/Languages/de_DE.wxl6
-rw-r--r--src/VBox/Installer/win/Languages/en_US.wxl4
-rw-r--r--src/VBox/Installer/win/Languages/fr_FR.wxl2
-rw-r--r--src/VBox/Installer/win/Makefile.kmk118
-rw-r--r--src/VBox/Installer/win/Resources/Makefile.kmk22
-rw-r--r--src/VBox/Installer/win/Resources/VBoxRes.rc2
-rw-r--r--src/VBox/Installer/win/Resources/dummy.cpp2
-rw-r--r--src/VBox/Installer/win/Resources/resource.h6
-rw-r--r--src/VBox/Installer/win/Stub/Makefile.kmk17
-rw-r--r--src/VBox/Installer/win/Stub/VBoxStub.cpp13
-rw-r--r--src/VBox/Installer/win/Stub/VBoxStub.h2
-rw-r--r--src/VBox/Installer/win/Stub/VBoxStub.manifest22
-rw-r--r--src/VBox/Installer/win/Stub/VBoxStub.rc5
-rw-r--r--src/VBox/Installer/win/Stub/resource.h7
-rw-r--r--src/VBox/Installer/win/StubBld/Makefile.kmk2
-rw-r--r--src/VBox/Installer/win/StubBld/VBoxStubBld.cpp2
-rw-r--r--src/VBox/Installer/win/StubBld/VBoxStubBld.h2
-rw-r--r--src/VBox/Installer/win/UserInterface.wxi835
-rw-r--r--src/VBox/Installer/win/VBoxKey.wxi6
-rw-r--r--src/VBox/Installer/win/VirtualBox.wxs620
-rw-r--r--src/VBox/Installer/win/VirtualBox_TypeLib.xsl3
-rw-r--r--src/VBox/Installer/win/dep.sed8
72 files changed, 2311 insertions, 1422 deletions
diff --git a/src/VBox/Installer/Makefile.kmk b/src/VBox/Installer/Makefile.kmk
index a3712dbe8..be9b4c954 100644
--- a/src/VBox/Installer/Makefile.kmk
+++ b/src/VBox/Installer/Makefile.kmk
@@ -1,4 +1,4 @@
-# $Id: Makefile.kmk $
+# $Id: Makefile.kmk 28800 2010-04-27 08:22:32Z vboxsync $
## @file
# Install misc stuff and create dist packages.
#
diff --git a/src/VBox/Installer/common/Makefile.kmk b/src/VBox/Installer/common/Makefile.kmk
index b31eb60ba..86ef520fd 100644
--- a/src/VBox/Installer/common/Makefile.kmk
+++ b/src/VBox/Installer/common/Makefile.kmk
@@ -1,4 +1,4 @@
-# $Id: Makefile.kmk $
+# $Id: Makefile.kmk 38001 2011-07-18 10:16:11Z vboxsync $
## @file
# Common installer stuff.
#
@@ -28,7 +28,7 @@ ifdef VBOX_WITH_PYTHON
INSTALLS += VBox-python-glue-installer
-VBox-python-glue-installer_INST = $(INST_SDK)/installer
+VBox-python-glue-installer_INST = $(INST_SDK)/installer/
VBox-python-glue-installer_SOURCES = vboxapisetup.py
endif # VBOX_WITH_PYTHON
diff --git a/src/VBox/Installer/common/virtualbox.xml b/src/VBox/Installer/common/virtualbox.xml
index 089c4f91a..3af24a30d 100644
--- a/src/VBox/Installer/common/virtualbox.xml
+++ b/src/VBox/Installer/common/virtualbox.xml
@@ -27,4 +27,32 @@
<glob pattern="*.ova"/>
<icon name="virtualbox-ova"/>
</mime-type>
+
+ <mime-type type="application/x-virtualbox-vdi">
+ <comment>Virtual Disk Image</comment>
+ <comment xml:lang="en">Virtual Disk Image</comment>
+ <glob pattern="*.vdi"/>
+ <icon name="virtualbox-vdi"/>
+ </mime-type>
+
+ <mime-type type="application/x-virtualbox-vmdk">
+ <comment>Virtual Machine Disk Format</comment>
+ <comment xml:lang="en">Virtual Machine Disk Format</comment>
+ <glob pattern="*.vmdk"/>
+ <icon name="virtualbox-vmdk"/>
+ </mime-type>
+
+ <mime-type type="application/x-virtualbox-vhd">
+ <comment>Virtual Hard Disk</comment>
+ <comment xml:lang="en">Virtual Hard Disk</comment>
+ <glob pattern="*.vhd"/>
+ <icon name="virtualbox-vhd"/>
+ </mime-type>
+
+ <mime-type type="application/x-virtualbox-hdd">
+ <comment>Virtual Hard Disk</comment>
+ <comment xml:lang="en">Virtual Hard Disk</comment>
+ <glob pattern="*.hdd"/>
+ <icon name="virtualbox-hdd"/>
+ </mime-type>
</mime-info>
diff --git a/src/VBox/Installer/darwin/Makefile.kmk b/src/VBox/Installer/darwin/Makefile.kmk
index 34c67ccf8..94e0fa326 100644
--- a/src/VBox/Installer/darwin/Makefile.kmk
+++ b/src/VBox/Installer/darwin/Makefile.kmk
@@ -1,4 +1,4 @@
-# $Id: Makefile.kmk $
+# $Id: Makefile.kmk 37549 2011-06-20 08:44:19Z vboxsync $
## @file
# Install misc stuff and create dist packages for Mac OS X.
#
@@ -660,6 +660,10 @@ VBOX_DI_VBAPP_MISC_FILES = \
Resources/virtualbox-vbox-extpack.icns \
Resources/virtualbox-ovf.icns \
Resources/virtualbox-ova.icns \
+ Resources/virtualbox-vdi.icns \
+ Resources/virtualbox-vmdk.icns \
+ Resources/virtualbox-vhd.icns \
+ Resources/virtualbox-hdd.icns \
MacOS/components/VBoxXPCOMBase.xpt \
MacOS/components/VirtualBox_XPCOM.xpt
ifdef VBOX_WITH_DOCS_PACKING
diff --git a/src/VBox/Installer/darwin/VirtualBox/postflight b/src/VBox/Installer/darwin/VirtualBox/postflight
index 0a1320037..0a1320037 100755..100644
--- a/src/VBox/Installer/darwin/VirtualBox/postflight
+++ b/src/VBox/Installer/darwin/VirtualBox/postflight
diff --git a/src/VBox/Installer/freebsd/Makefile.kmk b/src/VBox/Installer/freebsd/Makefile.kmk
index 71beed19b..e5e3f2efe 100644
--- a/src/VBox/Installer/freebsd/Makefile.kmk
+++ b/src/VBox/Installer/freebsd/Makefile.kmk
@@ -1,4 +1,4 @@
-# $Id: Makefile.kmk $
+# $Id: Makefile.kmk 35380 2010-12-30 16:06:17Z vboxsync $
## @file
# Makefile for the FreeBSD installer.
#
diff --git a/src/VBox/Installer/freebsd/postdeinstall.sh b/src/VBox/Installer/freebsd/postdeinstall.sh
index 394d5d4a7..394d5d4a7 100755..100644
--- a/src/VBox/Installer/freebsd/postdeinstall.sh
+++ b/src/VBox/Installer/freebsd/postdeinstall.sh
diff --git a/src/VBox/Installer/freebsd/postinstall.sh b/src/VBox/Installer/freebsd/postinstall.sh
index 7bb905b75..7bb905b75 100755..100644
--- a/src/VBox/Installer/freebsd/postinstall.sh
+++ b/src/VBox/Installer/freebsd/postinstall.sh
diff --git a/src/VBox/Installer/linux/Makefile.include.footer b/src/VBox/Installer/linux/Makefile.include.footer
new file mode 100644
index 000000000..a7cc480de
--- /dev/null
+++ b/src/VBox/Installer/linux/Makefile.include.footer
@@ -0,0 +1,92 @@
+#
+# VirtualBox Guest Additions kernel module Makefile, common parts.
+#
+# See Makefile.include.header for details of how to use this.
+#
+# Copyright (C) 2006-2011 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# override is required by the Debian guys
+override MODULE = $(MOD_NAME)
+OBJS = $(MOD_OBJS)
+
+ifneq ($(MAKECMDGOALS),clean)
+
+KBUILD_VERBOSE ?= 1
+
+#
+# Compiler options
+#
+ifndef INCL
+ INCL := $(addprefix -I,$(KERN_INCL) $(EXTRA_INCL))
+ ifndef KBUILD_EXTMOD
+ KBUILD_EXTMOD := $(shell pwd)
+ endif
+ INCL += $(MOD_INCL)
+ export INCL
+endif
+KFLAGS := -D__KERNEL__ -DMODULE $(MOD_DEFS)
+ifeq ($(BUILD_TYPE),debug)
+ KFLAGS += -DDEBUG
+endif
+
+ifeq ($(KERN_VERSION), 24)
+#
+# 2.4
+#
+
+ifeq ($(BUILD_TARGET_ARCH),amd64)
+ KFLAGS += -mcmodel=kernel
+endif
+
+CFLAGS := -O2 -DVBOX_LINUX_2_4 $(MOD_CFLAGS) $(INCL) $(KFLAGS) $(MOD_EXTRA) $(KDEBUG)
+MODULE_EXT := o
+
+# 2.4 Module linking
+$(MODULE).o: $(OBJS)
+ $(LD) -o $@ -r $(OBJS)
+
+.PHONY: $(MODULE)
+all: $(MODULE)
+$(MODULE): $(MODULE).o
+
+else
+#
+# 2.6 and later
+#
+
+MODULE_EXT := ko
+
+$(MODULE)-y := $(OBJS)
+
+# build defs
+EXTRA_CFLAGS += $(MOD_CFLAGS) $(INCL) $(KFLAGS) $(MOD_EXTRA) $(KDEBUG)
+
+all: $(MODULE)
+
+obj-m += $(MODULE).o
+
+$(MODULE):
+ $(MAKE) KBUILD_VERBOSE=$(KBUILD_VERBOSE) -C $(KERN_DIR) SUBDIRS=$(CURDIR) SRCROOT=$(CURDIR) modules
+
+endif
+
+install: $(MODULE)
+ @mkdir -p $(MODULE_DIR); \
+ install -m 0664 -o root -g root $(MODULE).$(MODULE_EXT) $(MODULE_DIR); \
+ PATH="$(PATH):/bin:/sbin" depmod -a;
+
+endif # eq($(MAKECMDGOALS),clean)
+
+# important: Don't remove Module.symvers! DKMS does 'make clean' before building ...
+clean:
+ for f in $(MOD_CLEAN); do rm -f $$f/*.o $$f/.*.cmd $$f/.*.flags; done
+ rm -rf .$(MOD_NAME)* .tmp_ver* $(MOD_NAME).* Modules.symvers modules.order
diff --git a/src/VBox/Installer/linux/Makefile.include.header b/src/VBox/Installer/linux/Makefile.include.header
new file mode 100644
index 000000000..21183da65
--- /dev/null
+++ b/src/VBox/Installer/linux/Makefile.include.header
@@ -0,0 +1,158 @@
+#
+# VirtualBox Guest Additions kernel module Makefile, common parts.
+#
+# (For 2.6.x, the main file must be called 'Makefile'!)
+#
+# Copyright (C) 2006-2011 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+#
+# These file should be included by the Makefiles for any kernel modules we
+# build as part of the Guest Additions. The intended way of doing this is as
+# follows:
+#
+# # Linux kbuild sets this to our source directory if we are called from
+# # there
+# obj ?= $(CURDIR)
+# include $(obj)/Makefile.include.header
+# MOD_NAME = <name of the module to be built, without extension>
+# MOD_OBJS = <list of object files which should be included>
+# MOD_DEFS = <any additional defines which this module needs>
+# MOD_INCL = <any additional include paths which this module needs>
+# MOD_CFLAGS = <any additional CFLAGS which this module needs>
+# MOD_CLEAN = <list of directories that the clean target should look at>
+# include $(obj)/Makefile.include.footer
+#
+# The kmk kBuild define KBUILD_TARGET_ARCH is available.
+#
+
+
+#
+# First, figure out which architecture we're targeting and the build type.
+# (We have to support basic cross building (ARCH=i386|x86_64).)
+# While at it, warn about BUILD_* vars found to help with user problems.
+#
+ifeq ($(filter-out x86_64 amd64 AMD64,$(shell uname -m)),)
+ BUILD_TARGET_ARCH_DEF := amd64
+else
+ BUILD_TARGET_ARCH_DEF := x86
+endif
+ifneq ($(filter-out amd64 x86,$(BUILD_TARGET_ARCH)),)
+ $(warning Ignoring unknown BUILD_TARGET_ARCH value '$(BUILD_TARGET_ARCH)'.)
+ BUILD_TARGET_ARCH :=
+endif
+ifeq ($(BUILD_TARGET_ARCH),)
+ ifeq ($(ARCH),x86_64)
+ BUILD_TARGET_ARCH := amd64
+ else
+ ifeq ($(ARCH),i386)
+ BUILD_TARGET_ARCH := x86
+ else
+ BUILD_TARGET_ARCH := $(BUILD_TARGET_ARCH_DEF)
+ endif
+ endif
+else
+ ifneq ($(BUILD_TARGET_ARCH),$(BUILD_TARGET_ARCH_DEF))
+ $(warning Using BUILD_TARGET_ARCH='$(BUILD_TARGET_ARCH)' from the $(origin BUILD_TARGET_ARCH).)
+ endif
+endif
+
+ifneq ($(filter-out release profile debug strict,$(BUILD_TYPE)),)
+ $(warning Ignoring unknown BUILD_TYPE value '$(BUILD_TYPE)'.)
+ BUILD_TYPE :=
+endif
+ifeq ($(BUILD_TYPE),)
+ BUILD_TYPE := release
+else
+ ifneq ($(BUILD_TYPE),release)
+ $(warning Using BUILD_TYPE='$(BUILD_TYPE)' from the $(origin BUILD_TYPE).)
+ endif
+endif
+
+ifneq ($(MAKECMDGOALS),clean)
+
+ifeq ($(KERNELRELEASE),)
+
+ #
+ # building from this directory
+ #
+
+ # kernel base directory
+ ifndef KERN_DIR
+ KERN_DIR := /lib/modules/$(shell uname -r)/build
+ ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
+ KERN_DIR := /usr/src/linux
+ ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
+ $(error Error: unable to find the sources of your current Linux kernel. \
+ Specify KERN_DIR=<directory> and run Make again)
+ endif
+ $(warning Warning: using /usr/src/linux as the source directory of your \
+ Linux kernel. If this is not correct, specify \
+ KERN_DIR=<directory> and run Make again.)
+ endif
+ else
+ ifneq ($(shell if test -d $(KERN_DIR); then echo yes; fi),yes)
+ $(error Error: KERN_DIR does not point to a directory)
+ endif
+ endif
+
+ # includes
+ ifndef KERN_INCL
+ KERN_INCL = $(KERN_DIR)/include
+ endif
+ ifneq ($(shell if test -d $(KERN_INCL); then echo yes; fi),yes)
+ $(error Error: unable to find the include directory for your current Linux \
+ kernel. Specify KERN_INCL=<directory> and run Make again)
+ endif
+
+ # module install dir, only for current kernel
+ ifneq ($(filter install install_rpm,$(MAKECMDGOALS)),)
+ ifndef MODULE_DIR
+ MODULE_DIR_TST := /lib/modules/$(shell uname -r)
+ ifeq ($(shell if test -d $(MODULE_DIR_TST); then echo yes; fi),yes)
+ MODULE_DIR := $(MODULE_DIR_TST)/misc
+ else
+ $(error Unable to find the folder to install the module to)
+ endif
+ endif # MODULE_DIR unspecified
+ endif
+
+ # guess kernel version (24 or 26)
+ ifeq ($(shell if grep '"2\.4\.' $(KERN_INCL)/linux/version.h > /dev/null; then echo yes; fi),yes)
+ KERN_VERSION := 24
+ else
+ KERN_VERSION := 26
+ endif
+
+else # neq($(KERNELRELEASE),)
+
+ #
+ # building from kbuild (make -C <kernel_directory> M=`pwd`)
+ #
+
+ # guess kernel version (24 or 26)
+ ifeq ($(shell if echo "$(VERSION).$(PATCHLEVEL)." | grep '2\.4\.' > /dev/null; then echo yes; fi),yes)
+ KERN_VERSION := 24
+ else
+ KERN_VERSION := 26
+ endif
+
+endif # neq($(KERNELRELEASE),)
+
+# debug - show guesses.
+ifdef DEBUG
+$(warning dbg: KERN_DIR = $(KERN_DIR))
+$(warning dbg: KERN_INCL = $(KERN_INCL))
+$(warning dbg: MODULE_DIR = $(MODULE_DIR))
+$(warning dbg: KERN_VERSION = $(KERN_VERSION))
+endif
+
+endif # eq($(MAKECMDGOALS),clean)
diff --git a/src/VBox/Installer/linux/Makefile.kmk b/src/VBox/Installer/linux/Makefile.kmk
index 9a45f8887..792058a47 100644
--- a/src/VBox/Installer/linux/Makefile.kmk
+++ b/src/VBox/Installer/linux/Makefile.kmk
@@ -1,4 +1,4 @@
-# $Id: Makefile.kmk $
+# $Id: Makefile.kmk 38001 2011-07-18 10:16:11Z vboxsync $
## @file
# Makefile for the Linux installer.
#
@@ -18,6 +18,11 @@
SUB_DEPTH = ../../../..
include $(KBUILD_PATH)/subheader.kmk
+# Include sub-makefile.
+ifdef VBOX_WITH_TESTCASES
+ include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk
+endif
+
ifneq ($(KBUILD_HOST),linux)
$(error "The Linux installer can only be built on Linux!")
endif
@@ -94,7 +99,7 @@ else
endif
INSTALLS += linux-icons
-linux-icons_INST = bin/icons
+linux-icons_INST = bin/icons/
linux-icons_MODE = a+r,u+w
linux-icons_SOURCES = $(VBOX_MIME_ICONS) $(VBOX_DESKTOP_ICONS)
@@ -277,7 +282,7 @@ endif
VBOX_MIME_ICONS = \
$(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\
- $(foreach f,ova ovf vbox vbox-extpack, \
+ $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
$(foreach s,16 20 24 32 48 64 72 96 128 256,\
virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/virtualbox-$(f).png)))
@@ -309,12 +314,9 @@ $(PATH_BIN)/$(VBOX_LNX_PACKAGE_NAME): \
$(VBOX_LNX_INST_OUT_DIR)/vboxdrv.sh \
$(VBOX_LNX_INST_OUT_DIR)/vboxweb-service.sh \
$(VBOX_LNX_INST_OUT_DIR)/install.sh \
+ $(VBOX_PATH_LNX_INST_SRC)/installer-utils.sh \
$(VBOX_PATH_LNX_INST_SRC)/vboxdrv-pardus.py \
- $(VBOX_PATH_LNX_INST_SRC)/uninstall.sh \
- $(wildcard $(PATH_BIN)/src/*) \
- $(wildcard $(PATH_BIN)/src/*/*) \
- $(wildcard $(PATH_BIN)/src/*/*/*) \
- $(wildcard $(PATH_BIN)/src/*/*/*/*)
+ $(VBOX_PATH_LNX_INST_SRC)/uninstall.sh
$(call MSG_TOOL,makeself,,$@)
$(QUIET)$(RM) -f $(wildcard $(PATH_BIN)/VirtualBox-*.run)
$(QUIET)$(INSTALL) -m 0755 $(VBOX_PATH_LNX_INST_SRC)/routines.sh $(VBOX_LNX_INST_STAGE_DIR)/
@@ -356,7 +358,7 @@ $(VBOX_LNX_INST_OUT_DIR)/vboxweb-service.sh: $(VBOX_PATH_LNX_INST_SRC)/vboxweb-s
--output $@ \
$<
-$(VBOX_LNX_INST_OUT_DIR)/install.sh: $(VBOX_PATH_LNX_INST_SRC)/install.sh $(VBOX_VERSION_STAMP) $(VBOX_SVN_REV_KMK).ts | $$(dir $$@)
+$(VBOX_LNX_INST_OUT_DIR)/install.sh: $(VBOX_PATH_LNX_INST_SRC)/install.sh $(VBOX_PATH_LNX_INST_SRC)/installer-utils.sh $(VBOX_VERSION_STAMP) $(VBOX_SVN_REV_KMK).ts | $$(dir $$@)
$(QUIET)$(SED) \
-e "s;_VERSION_;$(VBOX_VERSION_STRING);g" \
-e "s;_SVNREV_;$(VBOX_SVN_REV);g" \
@@ -364,16 +366,32 @@ $(VBOX_LNX_INST_OUT_DIR)/install.sh: $(VBOX_PATH_LNX_INST_SRC)/install.sh $(VBOX
-e "s;_ARCH_;$(KBUILD_TARGET_ARCH);g" \
-e "s;_HARDENED_;$(VBOX_WITH_HARDENING);g" \
-e "s;_PYTHON_;$(VBOX_WITH_PYTHON);g" \
+ -e '/#include installer-utils.sh/ {' \
+ -e "r $(PATH_ROOT)/src/VBox/Installer/linux/installer-utils.sh" \
+ -e 'd' \
+ -e '}' \
--output $@ \
$<
#
+# The files that the tar archives depend on. The wildcards are ugly, but they
+# do save us from having to update the makefile whenever something new is added
+# to the module source directories.
+#
+VBOX_LNX_INST_ARCH_DEPS := \
+ $(addprefix $(VBOX_LNX_INST_OUT_DIR)/archive/, $(VBOX_LNX_ARCH_FILES)) \
+ $(VBOX_LNX_INST_DEP_ON_MAKEFILE) \
+ $(VBOX_VERSION_STAMP) \
+ $(wildcard $(PATH_BIN)/src/*) \
+ $(wildcard $(PATH_BIN)/src/*/*) \
+ $(wildcard $(PATH_BIN)/src/*/*/*) \
+ $(wildcard $(PATH_BIN)/src/*/*/*/*)
+
+
+#
# .tar.bz2 for converting into .run
#
-$(VBOX_LNX_INST_STAGE_DIR)/VirtualBox.tar.bz2: \
- $(addprefix $(VBOX_LNX_INST_OUT_DIR)/archive/, $(VBOX_LNX_ARCH_FILES)) \
- $(VBOX_LNX_INST_DEP_ON_MAKEFILE) \
- $(VBOX_VERSION_STAMP)
+$(VBOX_LNX_INST_STAGE_DIR)/VirtualBox.tar.bz2: $(VBOX_LNX_INST_ARCH_DEPS)
$(call MSG_L1,Packing $@)
$(QUIET)$(RM) -f -- $@ $(patsubst %.bz2,%,$@)
$(QUIET)$(MKDIR) -p $(@D)
@@ -388,10 +406,7 @@ endif
#
# .tar.bz2 for distribution with the files under VirtualBox-<ver>/.
#
-$(PATH_BIN)/VirtualBox.tar.bz2: \
- $(addprefix $(VBOX_LNX_INST_OUT_DIR)/archive/, $(VBOX_LNX_ARCH_FILES)) \
- $(VBOX_LNX_INST_DEP_ON_MAKEFILE) \
- $(VBOX_VERSION_STAMP)
+$(PATH_BIN)/VirtualBox.tar.bz2: $(VBOX_LNX_INST_ARCH_DEPS)
$(call MSG_L1,Packing $@)
$(QUIET)$(RM) -f -- $(VBOX_LNX_INST_OUT_DIR)/VirtualBox-$(VBOX_VERSION_STRING) $@ $(patsubst %.bz2,%,$@)
$(QUIET)$(LN_SYMLINK) $(VBOX_LNX_INST_OUT_DIR)/archive/ $(VBOX_LNX_INST_OUT_DIR)/VirtualBox-$(VBOX_VERSION_STRING)
diff --git a/src/VBox/Installer/linux/VBox.sh b/src/VBox/Installer/linux/VBox.sh
index e427872f6..e427872f6 100755..100644
--- a/src/VBox/Installer/linux/VBox.sh
+++ b/src/VBox/Installer/linux/VBox.sh
diff --git a/src/VBox/Installer/linux/VBoxCreateUSBNode.sh b/src/VBox/Installer/linux/VBoxCreateUSBNode.sh
index ab93c5ffa..7d307f547 100755..100644
--- a/src/VBox/Installer/linux/VBoxCreateUSBNode.sh
+++ b/src/VBox/Installer/linux/VBoxCreateUSBNode.sh
@@ -1,5 +1,5 @@
#! /bin/sh
-# $Id: VBoxCreateUSBNode.sh $ */
+# $Id: VBoxCreateUSBNode.sh 37339 2011-06-07 09:40:34Z vboxsync $ */
## @file
# VirtualBox USB Proxy Service, Linux Specialization.
# udev helper for creating and removing device nodes for VirtualBox USB devices
@@ -17,6 +17,9 @@
# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
#
+# Constant, from the USB specifications
+usb_class_hub=9
+
do_remove=0
case "$1" in "--remove")
do_remove=1; shift;;
@@ -25,22 +28,21 @@ bus=`expr "$2" '/' 128 + 1`
device=`expr "$2" '%' 128 + 1`
class="$3"
group="$4"
-if test "$class" -eq 9; then
- exit 0
-fi
devdir="`printf "/dev/vboxusb/%.3d" $bus`"
devpath="`printf "/dev/vboxusb/%.3d/%.3d" $bus $device`"
-if test "$do_remove" -eq 0; then
- if test -z "$group"; then
- group="vboxusers"
- fi
+case "$do_remove" in
+ 0)
+ case "$class" in "$usb_class_hub") exit 0;; esac
+ case "$group" in "") group="vboxusers";; esac
mkdir /dev/vboxusb -m 0750 2>/dev/null
chown root:$group /dev/vboxusb 2>/dev/null
mkdir "$devdir" -m 0750 2>/dev/null
chown root:$group "$devdir" 2>/dev/null
mknod "$devpath" c $1 $2 -m 0660 2>/dev/null
chown root:$group "$devpath" 2>/dev/null
-else
+ ;;
+ 1)
rm -f "$devpath"
-fi
+ ;;
+esac
diff --git a/src/VBox/Installer/linux/VBoxSysInfo.sh b/src/VBox/Installer/linux/VBoxSysInfo.sh
index c30c75bde..c30c75bde 100755..100644
--- a/src/VBox/Installer/linux/VBoxSysInfo.sh
+++ b/src/VBox/Installer/linux/VBoxSysInfo.sh
diff --git a/src/VBox/Installer/linux/deffiles b/src/VBox/Installer/linux/deffiles
index e350ca198..e2eaa1513 100755..100644
--- a/src/VBox/Installer/linux/deffiles
+++ b/src/VBox/Installer/linux/deffiles
@@ -99,6 +99,7 @@ DEFAULT_FILE_NAMES=" \
src/include/iprt/thread.h \
src/include/iprt/types.h \
src/include/iprt/uuid.h \
+ src/include/iprt/x86.h \
src/include/internal/initterm.h \
src/include/internal/magics.h \
src/include/internal/thread.h \
diff --git a/src/VBox/Installer/linux/install.sh b/src/VBox/Installer/linux/install.sh
index 96198089f..be1951a9b 100755..100644
--- a/src/VBox/Installer/linux/install.sh
+++ b/src/VBox/Installer/linux/install.sh
@@ -17,8 +17,9 @@
PATH=$PATH:/bin:/sbin:/usr/sbin
-# Source functions needed by the installer
+# Include routines and utilities needed by the installer
. ./routines.sh
+#include installer-utils.sh
LOG="/var/log/vbox-install.log"
VERSION="_VERSION_"
@@ -281,6 +282,7 @@ if [ "$ACTION" = "install" ]; then
$DKMS remove -m vboxnetadp -v $INSTALL_VER --all > /dev/null 2>&1
fi
# OSE doesn't always have the initscript
+ rmmod vboxpci > /dev/null 2>&1
rmmod vboxnetadp > /dev/null 2>&1
rmmod vboxnetflt > /dev/null 2>&1
rmmod vboxdrv > /dev/null 2>&1
@@ -440,41 +442,8 @@ if [ "$ACTION" = "install" ]; then
fi
# Create udev description file
- if [ -d /etc/udev/rules.d ]; then
- udev_call=""
- udev_app=`which udevadm 2> /dev/null`
- if [ $? -eq 0 ]; then
- udev_call="${udev_app} version 2> /dev/null"
- else
- udev_app=`which udevinfo 2> /dev/null`
- if [ $? -eq 0 ]; then
- udev_call="${udev_app} -V 2> /dev/null"
- fi
- fi
- udev_fix="="
- if [ "${udev_call}" != "" ]; then
- udev_out=`${udev_call}`
- udev_ver=`expr "$udev_out" : '[^0-9]*\([0-9]*\)'`
- if [ "$udev_ver" = "" -o "$udev_ver" -lt 55 ]; then
- udev_fix=""
- fi
- fi
- # Write udev rules
- echo "KERNEL=${udev_fix}\"vboxdrv\", NAME=\"vboxdrv\", OWNER=\"root\", GROUP=\"$VBOXDRV_GRP\", MODE=\"$VBOXDRV_MODE\"" \
- > /etc/udev/rules.d/10-vboxdrv.rules
- echo "SUBSYSTEM=${udev_fix}\"usb_device\", ACTION=${udev_fix}\"add\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}\"" \
- >> /etc/udev/rules.d/10-vboxdrv.rules
- echo "SUBSYSTEM=${udev_fix}\"usb\", ACTION=${udev_fix}\"add\", ENV{DEVTYPE}==\"usb_device\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}\"" \
- >> /etc/udev/rules.d/10-vboxdrv.rules
- echo "SUBSYSTEM=${udev_fix}\"usb_device\", ACTION=${udev_fix}\"remove\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\"" \
- >> /etc/udev/rules.d/10-vboxdrv.rules
- echo "SUBSYSTEM=${udev_fix}\"usb\", ACTION=${udev_fix}\"remove\", ENV{DEVTYPE}==\"usb_device\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\"" \
- >> /etc/udev/rules.d/10-vboxdrv.rules
- fi
- # Remove old udev description file
- if [ -f /etc/udev/rules.d/60-vboxdrv.rules ]; then
- rm -f /etc/udev/rules.d/60-vboxdrv.rules 2> /dev/null
- fi
+ install_udev "$VBOXDRV_GRP" "$VBOXDRV_MODE" "$INSTALLATION_DIR" \
+ > /etc/udev/rules.d/10-vboxdrv.rules
# Build our device tree
for i in /sys/bus/usb/devices/*; do
diff --git a/src/VBox/Installer/linux/installer-utils.sh b/src/VBox/Installer/linux/installer-utils.sh
new file mode 100644
index 000000000..a732fcc10
--- /dev/null
+++ b/src/VBox/Installer/linux/installer-utils.sh
@@ -0,0 +1,114 @@
+# Oracle VM VirtualBox
+# VirtualBox installer shell routines
+#
+
+# Copyright (C) 2007-2011 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+setup_normal_input_install_udev() {
+ TEST_UDEV_VERSION="$1" # udev version to simulate
+ eval 'my_which() { which "$@" ; }'
+ eval 'my_test() { test "$@" ; }'
+ eval 'my_rm() { rm "$@" ; }'
+}
+
+setup_normal_input_install_udev
+
+setup_test_input_install_udev() {
+ TEST_NAME="$1" # used to identify the current test
+ TEST_UDEV_VERSION="$2" # udev version to simulate
+ eval 'my_which() { echo test_udev ; }'
+ eval 'my_test() { true ; }'
+ eval 'my_rm() { case "$2" in "/etc/udev/rules.d/60-vboxdrv.rules") true ;; *) echo "rm: bad file name \"$2\"!"; false ;; esac ; }'
+ eval 'test_udev() { echo "$TEST_UDEV_VERSION" ; }'
+ DELETED_UDEV_FILE=""
+}
+
+udev_write_vboxdrv() {
+ VBOXDRV_GRP="$1"
+ VBOXDRV_MODE="$2"
+
+ echo "KERNEL==\"vboxdrv\", NAME=\"vboxdrv\", OWNER=\"root\", GROUP=\"$VBOXDRV_GRP\", MODE=\"$VBOXDRV_MODE\""
+}
+
+udev_write_usb() {
+ INSTALLATION_DIR="$1"
+ USB_GROUP="$2"
+
+ echo "SUBSYSTEM==\"usb_device\", ACTION==\"add\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}${USB_GROUP}\""
+ echo "SUBSYSTEM==\"usb\", ACTION==\"add\", ENV{DEVTYPE}==\"usb_device\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}${USB_GROUP}\""
+ echo "SUBSYSTEM==\"usb_device\", ACTION==\"remove\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\""
+ echo "SUBSYSTEM==\"usb\", ACTION==\"remove\", ENV{DEVTYPE}==\"usb_device\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\""
+}
+
+install_udev() {
+ # install udev rule (disable with INSTALL_NO_UDEV=1 in /etc/default/virtualbox) for distribution packages
+ VBOXDRV_GRP="$1" # The group owning the vboxdrv device
+ VBOXDRV_MODE="$2" # The access mode for the vboxdrv device
+ INSTALLATION_DIR="$3" # The directory VirtualBox is installed in
+ USB_GROUP="$4" # The group that has permission to access USB devices
+ NO_INSTALL="$5" # Set this to "1" to remove but not re-install rules
+
+ # Extra space!
+ case "$USB_GROUP" in ?*) USB_GROUP=" $USB_GROUP" ;; esac
+ case "$NO_INSTALL" in
+ "1") ;;
+ *)
+ if my_test -d /etc/udev/rules.d; then
+ udev_call=""
+ udev_app=`my_which udevadm 2> /dev/null`
+ if [ $? -eq 0 ]; then
+ udev_call="${udev_app} version 2> /dev/null"
+ else
+ udev_app=`my_which udevinfo 2> /dev/null`
+ if [ $? -eq 0 ]; then
+ udev_call="${udev_app} -V 2> /dev/null"
+ fi
+ fi
+ udev_fix=""
+ if [ "${udev_call}" != "" ]; then
+ udev_out=`${udev_call}`
+ udev_ver=`expr "$udev_out" : '[^0-9]*\([0-9]*\)'`
+ if [ "$udev_ver" = "" -o "$udev_ver" -lt 55 ]; then
+ udev_fix="1"
+ fi
+ udev_do_usb=""
+ if [ "$udev_ver" -ge 59 ]; then
+ udev_do_usb="1"
+ fi
+ fi
+ case "$udev_fix" in
+ "1")
+ udev_write_vboxdrv "$VBOXDRV_GRP" "$VBOXDRV_MODE" |
+ sed 's/\([^+=]*\)[+=]*\([^"]*"[^"]*"\)/\1=\2/g'
+ ;;
+ *)
+ udev_write_vboxdrv "$VBOXDRV_GRP" "$VBOXDRV_MODE"
+ case "$udev_do_usb" in "1")
+ udev_write_usb "$INSTALLATION_DIR" "$USB_GROUP" ;;
+ esac
+ ;;
+ esac
+
+ fi
+ ;;
+ esac
+ # Remove old udev description file
+ if my_test -f /etc/udev/rules.d/60-vboxdrv.rules; then
+ my_rm -f /etc/udev/rules.d/60-vboxdrv.rules 2> /dev/null
+ fi
+}
+
+cleanup_test_input_install_udev() {
+ setup_normal_input_install_udev
+ unset test_udev
+ DELETED_UDEV_FILE=""
+}
diff --git a/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec b/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
index ac55e3583..d0e588b8f 100644
--- a/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
+++ b/src/VBox/Installer/linux/rpm/VirtualBox.tmpl.spec
@@ -27,7 +27,7 @@ License: GPLv2
Group: Applications/System
Vendor: Oracle Corporation
BuildRoot: %BUILDROOT%
-Requires: %LIBASOUND%
+Requires: %INITSCRIPTS% %LIBASOUND%
%if %{?rpm_suse:1}%{!?rpm_suse:0}
%debug_package
@@ -129,6 +129,10 @@ for d in /lib/modules/*; do
--use-module-symvers /tmp/vboxdrv-Module.symvers \
KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
%INSTMOD%
+ ./src/vboxhost/vboxpci/build_in_tmp \
+ --use-module-symvers /tmp/vboxdrv-Module.symvers \
+ KBUILD_VERBOSE= KERN_DIR=$d/build MODULE_DIR=$RPM_BUILD_ROOT/$d/misc -j4 \
+ %INSTMOD%
fi
done
mv kchmviewer $RPM_BUILD_ROOT/usr/lib/virtualbox
@@ -209,10 +213,13 @@ if [ "$INSTALL_NO_VBOXDRV" != "1" ]; then
find /lib/modules -name "vboxdrv\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
find /lib/modules -name "vboxnetflt\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
find /lib/modules -name "vboxnetadp\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
+ find /lib/modules -name "vboxpci\.*" 2>/dev/null|xargs rm -f 2> /dev/null || true
fi
%post
+#include installer-utils.sh
+
LOG="/var/log/vbox-install.log"
# defaults
@@ -230,41 +237,9 @@ fi
rm -f /etc/vbox/module_not_compiled
# install udev rule (disable with INSTALL_NO_UDEV=1 in /etc/default/virtualbox)
-if [ -d /etc/udev/rules.d -a "$INSTALL_NO_UDEV" != "1" ]; then
- udev_call=""
- udev_app=`which udevadm 2> /dev/null`
- if [ $? -eq 0 ]; then
- udev_call="${udev_app} version 2> /dev/null"
- else
- udev_app=`which udevinfo 2> /dev/null`
- if [ $? -eq 0 ]; then
- udev_call="${udev_app} -V 2> /dev/null"
- fi
- fi
- udev_fix="="
- if [ "${udev_call}" != "" ]; then
- udev_out=`${udev_call}`
- udev_ver=`expr "$udev_out" : '[^0-9]*\([0-9]*\)'`
- if [ "$udev_ver" = "" -o "$udev_ver" -lt 55 ]; then
- udev_fix=""
- fi
- fi
- usb_createnode="/usr/share/virtualbox/VBoxCreateUSBNode.sh"
- echo "KERNEL=${udev_fix}\"vboxdrv\", NAME=\"vboxdrv\", OWNER=\"root\", GROUP=\"root\", MODE=\"0600\"" \
- > /etc/udev/rules.d/10-vboxdrv.rules
- echo "SUBSYSTEM=${udev_fix}\"usb_device\", ACTION=${udev_fix}\"add\", RUN+=\"${usb_createnode} \$major \$minor \$attr{bDeviceClass}\"" \
- >> /etc/udev/rules.d/10-vboxdrv.rules
- echo "SUBSYSTEM=${udev_fix}\"usb\", ACTION=${udev_fix}\"add\", ENV{DEVTYPE}==\"usb_device\", RUN+=\"${usb_createnode} \$major \$minor \$attr{bDeviceClass}\"" \
- >> /etc/udev/rules.d/10-vboxdrv.rules
- echo "SUBSYSTEM=${udev_fix}\"usb_device\", ACTION=${udev_fix}\"remove\", RUN+=\"${usb_createnode} --remove \$major \$minor\"" \
- >> /etc/udev/rules.d/10-vboxdrv.rules
- echo "SUBSYSTEM=${udev_fix}\"usb\", ACTION=${udev_fix}\"remove\", ENV{DEVTYPE}==\"usb_device\", RUN+=\"${usb_createnode} --remove \$major \$minor\"" \
- >> /etc/udev/rules.d/10-vboxdrv.rules
-fi
-# Remove old udev description file
-if [ -f /etc/udev/rules.d/60-vboxdrv.rules ]; then
- rm -f /etc/udev/rules.d/60-vboxdrv.rules 2> /dev/null
-fi
+install_udev root 0600 /usr/share/virtualbox vboxusers "$INSTALL_NO_UDEV" \
+ > /etc/udev/rules.d/10-vboxdrv.rules
+
# Build our device tree
for i in /sys/bus/usb/devices/*; do
if test -r "$i/dev"; then
@@ -339,6 +314,7 @@ if [ "$INSTALL_NO_VBOXDRV" = "1" ]; then
rm -f /lib/modules/*/misc/vboxdrv.ko
rm -f /lib/modules/*/misc/vboxnetflt.ko
rm -f /lib/modules/*/misc/vboxnetadp.ko
+ rm -f /lib/modules/*/misc/vboxpci.ko
fi
if [ $BUILD_MODULES -eq 1 ]; then
/etc/init.d/vboxdrv setup || true
diff --git a/src/VBox/Installer/linux/rpm/rules b/src/VBox/Installer/linux/rpm/rules
index baf026d32..b69fa7482 100755
--- a/src/VBox/Installer/linux/rpm/rules
+++ b/src/VBox/Installer/linux/rpm/rules
@@ -29,7 +29,7 @@ ifeq ($(shell if grep -q '^/usr/lib/virtualbox' /etc/permissions* 2>/dev/null; t
$(error Fix /etc/permissions*)
endif
-verpkg := VirtualBox-4.0
+verpkg := VirtualBox-4.1
current := $(shell pwd)
vboxroot := $(shell cd ../../../../; pwd)
pkgdir := $(if $(PKGDIR),$(PKGDIR),$(shell cd ../../../../..; pwd))
@@ -113,6 +113,7 @@ cfg_flags := $(if $(filter rhel4 sles10.1,$(rpmrel)),--build-libxml2,) \
bld_flags := AUTOCFG=$(current)/rpm/AutoConfig.kmk \
LOCALCFG=$(current)/rpm/LocalConfig.kmk \
PATH_OUT=$(builddir) \
+ VBOX_WITHOUT_EXTPACK_PUEL_PACKING=1 \
VBOX_DO_STRIP= \
VBOX_WITH_MULTIVERSION_PYTHON= \
$(doc_dir) \
@@ -169,6 +170,11 @@ binary: rpm/build-stamp
-e 's|%MACROSPYTHON%|$(if $(wildcard /usr/lib/rpm/macros.python),%include /usr/lib/rpm/macros.python,)|g' \
-e 's|%INSTMOD%|$(instmod)|g' \
-e 's|%LIBASOUND%|$(if $(filter lib64,$(rpmlib)),libasound.so.2()(64bit),libasound.so.2)|g' \
+ -e 's|%INITSCRIPTS%|$(if $(filter fedora,$(rpmspec)),initscripts,)|g' \
+ -e '/#include installer-utils.sh/ {' \
+ -e "r $(vboxroot)/src/VBox/Installer/linux/installer-utils.sh" \
+ -e 'd' \
+ -e '}' \
rpm/VirtualBox.tmpl.spec > $(archdir)/VirtualBox.spec
sed \
-e 's|%NOLSB%|yes|g' \
diff --git a/src/VBox/Installer/linux/run-inst.sh b/src/VBox/Installer/linux/run-inst.sh
index a513fc0b7..a513fc0b7 100755..100644
--- a/src/VBox/Installer/linux/run-inst.sh
+++ b/src/VBox/Installer/linux/run-inst.sh
diff --git a/src/VBox/Installer/linux/runasroot.sh b/src/VBox/Installer/linux/runasroot.sh
index 41125ced1..89460abe6 100755..100644
--- a/src/VBox/Installer/linux/runasroot.sh
+++ b/src/VBox/Installer/linux/runasroot.sh
@@ -1,5 +1,5 @@
#!/bin/sh
-# $Id: runasroot.sh $
+# $Id: runasroot.sh 36785 2011-04-21 08:07:14Z vboxsync $
## @file
# VirtualBox privileged execution helper script for Linux and Solaris
#
diff --git a/src/VBox/Installer/linux/sh-utils.sh b/src/VBox/Installer/linux/sh-utils.sh
index dc9e0e823..2921a184d 100644
--- a/src/VBox/Installer/linux/sh-utils.sh
+++ b/src/VBox/Installer/linux/sh-utils.sh
@@ -1,4 +1,4 @@
-# $Id: sh-utils.sh $
+# $Id: sh-utils.sh 36779 2011-04-20 20:55:49Z vboxsync $
# Shell script include file
## @file
# Shell script routines which are likely to be useful for different scripts
diff --git a/src/VBox/Installer/linux/testcase/Makefile.kmk b/src/VBox/Installer/linux/testcase/Makefile.kmk
new file mode 100644
index 000000000..7a3b295db
--- /dev/null
+++ b/src/VBox/Installer/linux/testcase/Makefile.kmk
@@ -0,0 +1,40 @@
+# $Id: Makefile.kmk 38001 2011-07-18 10:16:11Z vboxsync $
+## @file
+# Sub-Makefile for the VBox Linux installer testcase.
+#
+
+#
+# Copyright (C) 2006-2011 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+SUB_DEPTH = ../../../../..
+include $(KBUILD_PATH)/subheader.kmk
+
+INSTALLS += tstInstallerLinux
+TESTING += tstInstallerLinux
+tstInstallerLinux_INST = $(INST_TESTCASE)
+tstInstallerLinux_MODE = a+rx,u+w
+tstInstallerLinux_SOURCES = $(tstInstallerLinux_0_OUTDIR)/tstInstallerLinux.sh
+tstInstallerLinux_CLEAN = $(tstInstallerLinux_0_OUTDIR)/tstInstallerLinux.sh
+
+$$(tstInstallerLinux_0_OUTDIR)/tstInstallerLinux.sh: \
+ $(PATH_SUB_CURRENT)/tstInstallerLinux.sh \
+ $(PATH_SUB_CURRENT)/../installer-utils.sh \
+ | $$(dir $$@)
+ $(QUIET)$(SED) \
+ -e '/#include installer-utils.sh/ {' \
+ -e "r $(PATH_ROOT)/src/VBox/Installer/linux/installer-utils.sh" \
+ -e 'd' \
+ -e '}' \
+ --output $@ \
+ $<
+
+include $(KBUILD_PATH)/subfooter.kmk
diff --git a/src/VBox/Installer/linux/testcase/tstInstaller.sh b/src/VBox/Installer/linux/testcase/tstInstaller.sh
new file mode 100644
index 000000000..094321e08
--- /dev/null
+++ b/src/VBox/Installer/linux/testcase/tstInstaller.sh
@@ -0,0 +1,66 @@
+#!/bin/sh
+#
+# Oracle VM VirtualBox
+# VirtualBox linux installation script unit test
+
+#
+# Copyright (C) 2007-2011 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+#include installer-utils.sh
+
+echo Testing udev rule generation
+
+setup_test_install_udev
+
+TEST_UDEV_VERSION=55
+
+udev_55_rules=`cat <<UDEV_END
+KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
+SUBSYSTEM=="usb_device", ACTION=="add", RUN="/opt/VirtualBox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
+SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN="/opt/VirtualBox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
+SUBSYSTEM=="usb_device", ACTION=="remove", RUN="/opt/VirtualBox/VBoxCreateUSBNode.sh --remove $major $minor"
+SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN="/opt/VirtualBox/VBoxCreateUSBNode.sh --remove $major $minor"
+UDEV_END
+
+install_udev_output="`install_udev_run`"
+case "$install_udev_output" in
+ "$udev_55_rules") ;;
+ *)
+ echo "Bad output for udev version 55. Expected:"
+ echo "$udev_55_rules"
+ echo "Actual:"
+ echo "$install_udev_output"
+ ;;
+esac
+
+TEST_UDEV_VERSION=54
+
+udev_54_rules=`cat <<UDEV_END
+KERNEL="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
+SUBSYSTEM="usb_device", ACTION="add", RUN="/opt/VirtualBox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
+SUBSYSTEM="usb", ACTION="add", ENV{DEVTYPE}="usb_device", RUN="/opt/VirtualBox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
+SUBSYSTEM="usb_device", ACTION="remove", RUN="/opt/VirtualBox/VBoxCreateUSBNode.sh --remove $major $minor"
+SUBSYSTEM="usb", ACTION="remove", ENV{DEVTYPE}="usb_device", RUN="/opt/VirtualBox/VBoxCreateUSBNode.sh --remove $major $minor"
+UDEV_END
+
+install_udev_output="`install_udev_run`"
+case "$install_udev_output" in
+ "$udev_54_rules") ;;
+ *)
+ echo "Bad output for udev version 54. Expected:"
+ echo "$udev_54_rules"
+ echo "Actual:"
+ echo "$install_udev_output"
+ ;;
+esac
+
+echo Done.
diff --git a/src/VBox/Installer/linux/testcase/tstInstallerLinux.sh b/src/VBox/Installer/linux/testcase/tstInstallerLinux.sh
new file mode 100644
index 000000000..cd20491d6
--- /dev/null
+++ b/src/VBox/Installer/linux/testcase/tstInstallerLinux.sh
@@ -0,0 +1,88 @@
+#!/bin/sh
+#
+# Oracle VM VirtualBox
+# VirtualBox linux installation script unit test
+
+#
+# Copyright (C) 2007-2011 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+#include installer-utils.sh
+
+CERRS=0
+
+echo "Testing udev rule generation"
+
+setup_test_input_install_udev ".run, udev-59" 59
+
+udev_59_rules=`cat <<'UDEV_END'
+KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
+SUBSYSTEM=="usb_device", ACTION=="add", RUN+="/opt/VirtualBox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
+SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device", RUN+="/opt/VirtualBox/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
+SUBSYSTEM=="usb_device", ACTION=="remove", RUN+="/opt/VirtualBox/VBoxCreateUSBNode.sh --remove $major $minor"
+SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/opt/VirtualBox/VBoxCreateUSBNode.sh --remove $major $minor"
+UDEV_END`
+
+install_udev_output="`install_udev vboxusers 0660 /opt/VirtualBox`"
+case "$install_udev_output" in
+ "$udev_59_rules") ;;
+ *)
+ echo "Bad output for udev version 59. Expected:"
+ echo "$udev_59_rules"
+ echo "Actual:"
+ echo "$install_udev_output"
+ CERRS="`expr "$CERRS" + 1`"
+ ;;
+esac
+
+cleanup_test_input_install_udev
+
+setup_test_input_install_udev ".run, udev-55" 55
+
+udev_55_rules=`cat <<'UDEV_END'
+KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
+UDEV_END`
+
+install_udev_output="`install_udev vboxusers 0660 /opt/VirtualBox`"
+case "$install_udev_output" in
+ "$udev_55_rules") ;;
+ *)
+ echo "Bad output for udev version 55. Expected:"
+ echo "$udev_55_rules"
+ echo "Actual:"
+ echo "$install_udev_output"
+ CERRS="`expr "$CERRS" + 1`"
+ ;;
+esac
+
+cleanup_test_input_install_udev
+
+setup_test_input_install_udev ".run, udev-54" 54
+
+udev_54_rules=`cat <<'UDEV_END'
+KERNEL="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="root", MODE="0600"
+UDEV_END`
+
+install_udev_output="`install_udev root 0600 /usr/lib/virtualbox`"
+case "$install_udev_output" in
+ "$udev_54_rules") ;;
+ *)
+ echo "Bad output for udev version 54. Expected:"
+ echo "$udev_54_rules"
+ echo "Actual:"
+ echo "$install_udev_output"
+ CERRS="`expr "$CERRS" + 1`"
+ ;;
+esac
+
+cleanup_test_input_install_udev
+
+echo "Done. Error count $CERRS."
diff --git a/src/VBox/Installer/linux/uninstall.sh b/src/VBox/Installer/linux/uninstall.sh
index 4ec1241af..4ec1241af 100755..100644
--- a/src/VBox/Installer/linux/uninstall.sh
+++ b/src/VBox/Installer/linux/uninstall.sh
diff --git a/src/VBox/Installer/linux/vboxballoonctrl-service.sh.in b/src/VBox/Installer/linux/vboxballoonctrl-service.sh.in
index 488fd238f..488fd238f 100755..100644
--- a/src/VBox/Installer/linux/vboxballoonctrl-service.sh.in
+++ b/src/VBox/Installer/linux/vboxballoonctrl-service.sh.in
diff --git a/src/VBox/Installer/linux/vboxdrv.sh.in b/src/VBox/Installer/linux/vboxdrv.sh.in
index a80746544..cdec04d84 100755..100644
--- a/src/VBox/Installer/linux/vboxdrv.sh.in
+++ b/src/VBox/Installer/linux/vboxdrv.sh.in
@@ -46,12 +46,14 @@ if [ -n "$INSTALL_DIR" ]; then
BUILDVBOXDRV="$INSTALL_DIR/src/vboxhost/vboxdrv/build_in_tmp"
BUILDVBOXNETFLT="$INSTALL_DIR/src/vboxhost/vboxnetflt/build_in_tmp"
BUILDVBOXNETADP="$INSTALL_DIR/src/vboxhost/vboxnetadp/build_in_tmp"
+ BUILDVBOXPCI="$INSTALL_DIR/src/vboxhost/vboxpci/build_in_tmp"
else
VBOXMANAGE="/usr/lib/%PACKAGE%/VBoxManage"
DODKMS="/usr/share/%PACKAGE%/src/vboxhost/do_dkms"
BUILDVBOXDRV="/usr/share/%PACKAGE%/src/vboxhost/vboxdrv/build_in_tmp"
BUILDVBOXNETFLT="/usr/share/%PACKAGE%/src/vboxhost/vboxnetflt/build_in_tmp"
BUILDVBOXNETADP="/usr/share/%PACKAGE%/src/vboxhost/vboxnetadp/build_in_tmp"
+ BUILDVBOXPCI="/usr/share/%PACKAGE%/src/vboxhost/vboxpci/build_in_tmp"
fi
# silently exit if the package was uninstalled but not purged,
@@ -194,6 +196,7 @@ start()
fi
# ensure permissions
if ! chown :%GROUP% $DEVICE 2>/dev/null; then
+ rmmod vboxpci 2>/dev/null
rmmod vboxnetadp 2>/dev/null
rmmod vboxnetflt 2>/dev/null
rmmod vboxdrv 2>/dev/null
@@ -205,6 +208,9 @@ start()
if ! $MODPROBE vboxnetadp > /dev/null 2>&1; then
failure "modprobe vboxnetadp failed. Please use 'dmesg' to find out why"
fi
+ if ! $MODPROBE vboxpci > /dev/null 2>&1; then
+ failure "modprobe vboxpci failed. Please use 'dmesg' to find out why"
+ fi
# Create the /dev/vboxusb directory if the host supports that method
# of USB access. The USB code checks for the existance of that path.
if grep -q usb_device /proc/devices; then
@@ -217,6 +223,11 @@ start()
stop()
{
begin_msg "Stopping VirtualBox kernel modules"
+ if running vboxpci; then
+ if ! rmmod vboxpci 2>/dev/null; then
+ failure "Cannot unload module vboxpci"
+ fi
+ fi
if running vboxnetadp; then
if ! rmmod vboxnetadp 2>/dev/null; then
failure "Cannot unload module vboxnetadp"
@@ -292,6 +303,11 @@ setup()
begin_msg "Uninstalling old VirtualBox DKMS kernel modules"
$DODKMS uninstall > $LOG
succ_msg
+ if find /lib/modules/`uname -r` -name "vboxpci\.*" 2>/dev/null|grep -q vboxpci; then
+ begin_msg "Removing old VirtualBox pci kernel module"
+ find /lib/modules/`uname -r` -name "vboxpci\.*" 2>/dev/null|xargs rm -f 2>/dev/null
+ succ_msg
+ fi
if find /lib/modules/`uname -r` -name "vboxnetadp\.*" 2>/dev/null|grep -q vboxnetadp; then
begin_msg "Removing old VirtualBox netadp kernel module"
find /lib/modules/`uname -r` -name "vboxnetadp\.*" 2>/dev/null|xargs rm -f 2>/dev/null
@@ -326,6 +342,11 @@ setup()
--no-print-directory install >> $LOG 2>&1; then
failure "Look at $LOG to find out what went wrong"
fi
+ if ! $BUILDVBOXPCI \
+ --use-module-symvers /tmp/vboxdrv-Module.symvers \
+ --no-print-directory install >> $LOG 2>&1; then
+ failure "Look at $LOG to find out what went wrong"
+ fi
fi
rm -f /etc/vbox/module_not_compiled
succ_msg
@@ -335,15 +356,17 @@ setup()
dmnstatus()
{
if running vboxdrv; then
+ str="vboxdrv"
if running vboxnetflt; then
+ str="$str, vboxnetflt"
if running vboxnetadp; then
- echo "VirtualBox kernel modules (vboxdrv, vboxnetflt and vboxnetadp) are loaded."
- else
- echo "VirtualBox kernel modules (vboxdrv and vboxnetflt) are loaded."
+ str="$str, vboxnetadp"
fi
- else
- echo "VirtualBox kernel module is loaded."
fi
+ if running vboxpci; then
+ str="$str, vboxpci"
+ fi
+ echo "VirtualBox kernel modules ($str) are loaded."
for i in $SHUTDOWN_USERS; do
# don't create the ipcd directory with wrong permissions!
if [ -d /tmp/.vbox-$i-ipc ]; then
diff --git a/src/VBox/Installer/linux/vboxweb-service.sh.in b/src/VBox/Installer/linux/vboxweb-service.sh.in
index dfd9605eb..dfd9605eb 100755..100644
--- a/src/VBox/Installer/linux/vboxweb-service.sh.in
+++ b/src/VBox/Installer/linux/vboxweb-service.sh.in
diff --git a/src/VBox/Installer/solaris/Makefile.kmk b/src/VBox/Installer/solaris/Makefile.kmk
index 5dc319e91..0ba257e2f 100644
--- a/src/VBox/Installer/solaris/Makefile.kmk
+++ b/src/VBox/Installer/solaris/Makefile.kmk
@@ -1,4 +1,4 @@
-# $Id: Makefile.kmk $
+# $Id: Makefile.kmk 37549 2011-06-20 08:44:19Z vboxsync $
## @file
# Sub-Makefile for the Solaris installer.
#
@@ -165,6 +165,7 @@ solaris-drv-confs_MODE = a+r,u+w
solaris-drv-confs_SOURCES = \
$(PATH_ROOT)/src/VBox/HostDrivers/Support/solaris/vboxdrv.conf \
$(if $(VBOX_WITH_NETFLT),$(PATH_ROOT)/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxflt.conf) \
+ $(if $(VBOX_WITH_NETFLT_CROSSBOW),$(PATH_ROOT)/src/VBox/HostDrivers/VBoxNetFlt/solaris/vboxbow.conf) \
$(if $(VBOX_WITH_NETADP),$(PATH_ROOT)/src/VBox/HostDrivers/VBoxNetAdp/solaris/vboxnet.conf) \
$(if $(VBOX_WITH_USB),$(PATH_ROOT)/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusbmon.conf) \
$(if $(VBOX_WITH_USB),$(PATH_ROOT)/src/VBox/HostDrivers/VBoxUSB/solaris/vboxusb.conf)
@@ -183,12 +184,12 @@ BLDDIRS += \
VBOX_MIME_ICONS = \
$(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\
- $(foreach f,ova ovf vbox vbox-extpack, \
+ $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
$(foreach s,16 20 24 32 48 64 72 96 128 256,\
virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/mimetypes/virtualbox-$(f).png)))
SOLARIS_COMMON_ICONS = \
- $(foreach f,ova ovf vbox vbox-extpack, \
+ $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
$(foreach s,16 20 24 32 48 64 72 96 128 256,\
$(s)x$(s)/mimetypes/virtualbox-$(f).png))
@@ -217,6 +218,7 @@ SOLARIS_STRIP_EXES = \
SOLARIS_DRIVER_BINS = \
vboxdrv \
$(if $(VBOX_WITH_NETFLT),vboxflt,) \
+ $(if $(VBOX_WITH_NETFLT_CROSSBOW),vboxbow,) \
$(if $(VBOX_WITH_NETADP),vboxnet,) \
$(if $(VBOX_WITH_USB),vboxusbmon,) \
$(if $(VBOX_WITH_USB),vboxusb,)
@@ -224,6 +226,7 @@ SOLARIS_DRIVER_BINS = \
SOLARIS_DRIVER_CONFS = \
vboxdrv.conf \
$(if $(VBOX_WITH_NETFLT),vboxflt.conf,) \
+ $(if $(VBOX_WITH_NETFLT_CROSSBOW),vboxbow.conf,) \
$(if $(VBOX_WITH_NETADP),vboxnet.conf,) \
$(if $(VBOX_WITH_USB),vboxusbmon.conf,) \
$(if $(VBOX_WITH_USB),vboxusb.conf,)
@@ -636,7 +639,7 @@ endif
$(PATH_ROOT)/src/VBox/Installer/common/virtualbox.desktop.in
$(QUIET)$(INSTALL) -m 0644 $(SOLARIS_USRSHR_APPS_DIR)/virtualbox.desktop.tmp $(SOLARIS_USRSHR_APPS_DIR)/virtualbox.desktop
$(QUIET)$(RM) -f $(SOLARIS_USRSHR_APPS_DIR)/virtualbox.desktop.tmp
- # S10 cannot deal with icon information in virtrtualbox.xml
+ # S10 cannot deal with icon information in virtualbox.xml
$(QUIET)$(SED) \
-e '/<icon/d' \
--output $(SOLARIS_USRSHR_MIMEXML_DIR)/virtualbox.xml.tmp \
diff --git a/src/VBox/Installer/solaris/VBoxISAExec.c b/src/VBox/Installer/solaris/VBoxISAExec.c
index 97f8ad9fc..db5f341e6 100644
--- a/src/VBox/Installer/solaris/VBoxISAExec.c
+++ b/src/VBox/Installer/solaris/VBoxISAExec.c
@@ -1,4 +1,4 @@
-/* $Id: VBoxISAExec.c $ */
+/* $Id: VBoxISAExec.c 28800 2010-04-27 08:22:32Z vboxsync $ */
/** @file
* VBoxISAExec, ISA exec wrapper, Solaris hosts.
*/
diff --git a/src/VBox/Installer/solaris/VBoxZoneAccess.c b/src/VBox/Installer/solaris/VBoxZoneAccess.c
index a77f32cb4..e8d9174e8 100644
--- a/src/VBox/Installer/solaris/VBoxZoneAccess.c
+++ b/src/VBox/Installer/solaris/VBoxZoneAccess.c
@@ -1,4 +1,4 @@
-/* $Id: VBoxZoneAccess.c $ */
+/* $Id: VBoxZoneAccess.c 28800 2010-04-27 08:22:32Z vboxsync $ */
/** @file
* VBoxZoneAccess - Hack that keeps vboxdrv referenced for granting zone access, Solaris hosts.
*/
diff --git a/src/VBox/Installer/solaris/checkinstall.sh b/src/VBox/Installer/solaris/checkinstall.sh
index 040ce57df..040ce57df 100755..100644
--- a/src/VBox/Installer/solaris/checkinstall.sh
+++ b/src/VBox/Installer/solaris/checkinstall.sh
diff --git a/src/VBox/Installer/solaris/makepackage.sh b/src/VBox/Installer/solaris/makepackage.sh
index 9261f979c..113ad5d3a 100755..100644
--- a/src/VBox/Installer/solaris/makepackage.sh
+++ b/src/VBox/Installer/solaris/makepackage.sh
@@ -162,6 +162,10 @@ filelist_fixup prototype '$3 == "platform/i86pc/kernel/drv/amd64/vboxdrv"'
filelist_fixup prototype '$3 == "platform/i86pc/kernel/drv/vboxflt"' '$6 = "sys"'
filelist_fixup prototype '$3 == "platform/i86pc/kernel/drv/amd64/vboxflt"' '$6 = "sys"'
+# NetFilter vboxbow
+filelist_fixup prototype '$3 == "platform/i86pc/kernel/drv/vboxbow"' '$6 = "sys"'
+filelist_fixup prototype '$3 == "platform/i86pc/kernel/drv/amd64/vboxbow"' '$6 = "sys"'
+
# NetAdapter vboxnet
filelist_fixup prototype '$3 == "platform/i86pc/kernel/drv/vboxnet"' '$6 = "sys"'
filelist_fixup prototype '$3 == "platform/i86pc/kernel/drv/amd64/vboxnet"' '$6 = "sys"'
diff --git a/src/VBox/Installer/solaris/pkginstall.sh b/src/VBox/Installer/solaris/pkginstall.sh
index 49aea0cff..49aea0cff 100755..100644
--- a/src/VBox/Installer/solaris/pkginstall.sh
+++ b/src/VBox/Installer/solaris/pkginstall.sh
diff --git a/src/VBox/Installer/solaris/postinstall.sh b/src/VBox/Installer/solaris/postinstall.sh
index 1dbfa2bde..1dbfa2bde 100755..100644
--- a/src/VBox/Installer/solaris/postinstall.sh
+++ b/src/VBox/Installer/solaris/postinstall.sh
diff --git a/src/VBox/Installer/solaris/preremove.sh b/src/VBox/Installer/solaris/preremove.sh
index a0ab4b528..a0ab4b528 100755..100644
--- a/src/VBox/Installer/solaris/preremove.sh
+++ b/src/VBox/Installer/solaris/preremove.sh
diff --git a/src/VBox/Installer/solaris/smf-vboxballoonctrl.sh b/src/VBox/Installer/solaris/smf-vboxballoonctrl.sh
index 9b4ee5b05..dfcd835cc 100755
--- a/src/VBox/Installer/solaris/smf-vboxballoonctrl.sh
+++ b/src/VBox/Installer/solaris/smf-vboxballoonctrl.sh
@@ -1,5 +1,5 @@
#!/sbin/sh
-# $Id: smf-vboxballoonctrl.sh $
+# $Id: smf-vboxballoonctrl.sh 36748 2011-04-20 11:24:54Z vboxsync $
# Copyright (C) 2008-2011 Oracle Corporation
#
diff --git a/src/VBox/Installer/solaris/smf-vboxwebsrv.sh b/src/VBox/Installer/solaris/smf-vboxwebsrv.sh
index 9a5b57d8f..c03201036 100755
--- a/src/VBox/Installer/solaris/smf-vboxwebsrv.sh
+++ b/src/VBox/Installer/solaris/smf-vboxwebsrv.sh
@@ -1,5 +1,5 @@
#!/sbin/sh
-# $Id: smf-vboxwebsrv.sh $
+# $Id: smf-vboxwebsrv.sh 36748 2011-04-20 11:24:54Z vboxsync $
# Copyright (C) 2008-2011 Oracle Corporation
#
diff --git a/src/VBox/Installer/solaris/vbi/makepackage.sh b/src/VBox/Installer/solaris/vbi/makepackage.sh
index 60689207d..60689207d 100755..100644
--- a/src/VBox/Installer/solaris/vbi/makepackage.sh
+++ b/src/VBox/Installer/solaris/vbi/makepackage.sh
diff --git a/src/VBox/Installer/solaris/vbi/preremove.sh b/src/VBox/Installer/solaris/vbi/preremove.sh
index f1e0b750e..f1e0b750e 100755..100644
--- a/src/VBox/Installer/solaris/vbi/preremove.sh
+++ b/src/VBox/Installer/solaris/vbi/preremove.sh
diff --git a/src/VBox/Installer/solaris/vboxconfig.sh b/src/VBox/Installer/solaris/vboxconfig.sh
index e26875fdd..5da68cf47 100755..100644
--- a/src/VBox/Installer/solaris/vboxconfig.sh
+++ b/src/VBox/Installer/solaris/vboxconfig.sh
@@ -1,5 +1,5 @@
#!/bin/sh
-# $Id: vboxconfig.sh $
+# $Id: vboxconfig.sh 38016 2011-07-18 13:06:11Z vboxsync $
#
# VirtualBox Configuration Script, Solaris host.
@@ -55,7 +55,10 @@ DESC_VBOXNET="NetAdapter"
MOD_VBOXNET_INST=32
MOD_VBOXFLT=vboxflt
-DESC_VBOXFLT="NetFilter"
+DESC_VBOXFLT="NetFilter (STREAMS)"
+
+MOD_VBOXBOW=vboxbow
+DESC_VBOXBOW="NetFilter (Crossbow)"
# No Separate VBI since (3.1)
#MOD_VBI=vbi
@@ -67,6 +70,7 @@ DESC_VBOXUSBMON="USBMonitor"
MOD_VBOXUSB=vboxusb
DESC_VBOXUSB="USB"
+UPDATEBOOTARCHIVE=0
REMOTEINST=0
FATALOP=fatal
NULLOP=nulloutput
@@ -223,17 +227,17 @@ get_sysinfo()
{
if test "$REMOTEINST" -eq 1 || test -z "$HOST_OS_MINORVERSION" || test -z "$HOST_OS_MAJORVERSION"; then
if test -f "$PKG_INSTALL_ROOT/etc/release"; then
- HOST_OS_MAJORVERSION=`cat $PKG_INSTALL_ROOT/etc/release | grep "Solaris 10"`
+ HOST_OS_MAJORVERSION=`cat "$PKG_INSTALL_ROOT/etc/release" | grep "Solaris 10"`
if test -n "$HOST_OS_MAJORVERSION"; then
HOST_OS_MAJORVERSION="5.10"
else
- HOST_OS_MAJORVERSION=`cat $PKG_INSTALL_ROOT/etc/release | egrep "snv_|oi_"`
+ HOST_OS_MAJORVERSION=`cat "$PKG_INSTALL_ROOT/etc/release" | egrep "snv_|oi_"`
if test -n "$HOST_OS_MAJORVERSION"; then
HOST_OS_MAJORVERSION="5.11"
fi
fi
if test "$HOST_OS_MAJORVERSION" != "5.10"; then
- HOST_OS_MINORVERSION=`cat $PKG_INSTALL_ROOT/etc/release | tr ' ' '\n' | egrep 'snv_|oi_' | sed -e "s/snv_//" -e "s/oi_//" -e "s/[^0-9]//"`
+ HOST_OS_MINORVERSION=`cat "$PKG_INSTALL_ROOT/etc/release" | tr ' ' '\n' | egrep 'snv_|oi_' | sed -e "s/snv_//" -e "s/oi_//" -e "s/[^0-9]//"`
else
HOST_OS_MINORVERSION=""
fi
@@ -277,6 +281,20 @@ check_module_arch()
fi
}
+# update_boot_archive()
+# cannot fail
+update_boot_archive()
+{
+ infoprint "Updating the boot archive..."
+ if test "$REMOTEINST" -eq 0; then
+ $BIN_BOOTADM update-archive > /dev/null
+ else
+ $BIN_BOOTADM update-archive -R "$PKG_INSTALL_ROOT" > /dev/null
+ fi
+ UPDATEBOOTARCHIVE=0
+}
+
+
# module_added(modname)
# returns 1 if added, 0 otherwise
module_added()
@@ -288,7 +306,7 @@ module_added()
# Add a space at end of module name to make sure we have a perfect match to avoid
# any substring matches: e.g "vboxusb" & "vboxusbmon"
- loadentry=`cat $PKG_INSTALL_ROOT/etc/name_to_major | grep "$1 "`
+ loadentry=`cat "$PKG_INSTALL_ROOT/etc/name_to_major" | grep "$1 "`
if test -z "$loadentry"; then
return 1
fi
@@ -369,6 +387,7 @@ rem_driver()
module_added $modname
if test "$?" -eq 0; then
+ UPDATEBOOTARCHIVE=1
if test "$ISIPS" != "$IPSOP"; then
$BIN_REMDRV $BASEDIR_OPT $modname
else
@@ -452,6 +471,28 @@ load_module()
fi
}
+load_vboxflt()
+{
+ if test -f "$DIR_CONF/vboxflt.conf"; then
+ add_driver "$MOD_VBOXFLT" "$DESC_VBOXFLT" "$FATALOP"
+ load_module "drv/$MOD_VBOXFLT" "$DESC_VBOXFLT" "$FATALOP"
+ else
+ # For custom pkgs that optionally ship this module, let's not fail but just warn
+ warnprint "$DESC_VBOXFLT installation requested but not shipped in this package."
+ fi
+}
+
+load_vboxbow()
+{
+ if test -f "$DIR_CONF/vboxbow.conf"; then
+ add_driver "$MOD_VBOXBOW" "$DESC_VBOXBOW" "$FATALOP"
+ load_module "drv/$MOD_VBOXBOW" "$DESC_VBOXBOW" "$FATALOP"
+ else
+ # For custom pkgs that optionally ship this module, let's not fail but just warn
+ warnprint "$DESC_VBOXBOW installation requested but not shipped in this package."
+ fi
+}
+
# install_drivers()
# !! failure is always fatal
install_drivers()
@@ -470,9 +511,9 @@ install_drivers()
# Add vboxdrv to devlink.tab
if test -f "$PKG_INSTALL_ROOT/etc/devlink.tab"; then
- sed -e '/name=vboxdrv/d' $PKG_INSTALL_ROOT/etc/devlink.tab > $PKG_INSTALL_ROOT/etc/devlink.vbox
- echo "type=ddi_pseudo;name=vboxdrv \D" >> $PKG_INSTALL_ROOT/etc/devlink.vbox
- mv -f $PKG_INSTALL_ROOT/etc/devlink.vbox $PKG_INSTALL_ROOT/etc/devlink.tab
+ sed -e '/name=vboxdrv/d' "$PKG_INSTALL_ROOT/etc/devlink.tab" > "$PKG_INSTALL_ROOT/etc/devlink.vbox"
+ echo "type=ddi_pseudo;name=vboxdrv \D" >> "$PKG_INSTALL_ROOT/etc/devlink.vbox"
+ mv -f "$PKG_INSTALL_ROOT/etc/devlink.vbox" "$PKG_INSTALL_ROOT/etc/devlink.tab"
else
errorprint "Missing $PKG_INSTALL_ROOT/etc/devlink.tab, aborting install"
return 1
@@ -493,23 +534,46 @@ install_drivers()
load_module "drv/$MOD_VBOXNET" "$DESC_VBOXNET" "$FATALOP"
fi
- # Load VBoxNetFlt
- if test -f "$DIR_CONF/vboxflt.conf"; then
- add_driver "$MOD_VBOXFLT" "$DESC_VBOXFLT" "$FATALOP"
- load_module "drv/$MOD_VBOXFLT" "$DESC_VBOXFLT" "$FATALOP"
+ # If both vboxinst_vboxbow and vboxinst_vboxflt exist, bail.
+ if test -f "$PKG_INSTALL_ROOT/etc/vboxinst_vboxflt" && test -f "$PKG_INSTALL_ROOT/etc/vboxinst_vboxbow"; then
+ errorprint "Force-install files '$PKG_INSTALL_ROOT/etc/vboxinst_vboxflt' and '$PKG_INSTALL_ROOT/etc/vboxinst_vboxbow' both exist."
+ errorprint "Cannot load $DESC_VBOXFLT and $DESC_VBOXBOW drivers at the same time."
+ return 1
+ fi
+
+ # If the force-install files exists, install blindly
+ if test -f "$PKG_INSTALL_ROOT/etc/vboxinst_vboxflt"; then
+ load_vboxflt
+ elif test -f "$PKG_INSTALL_ROOT/etc/vboxinst_vboxbow"; then
+ infoprint "here"
+ load_vboxbow
+ else
+ # If host is S10 or S11 (< snv_159) or vboxbow isn't shipped, then load vboxflt
+ if test "$HOST_OS_MAJORVERSION" = "5.10" || test "$HOST_OS_MINORVERSION" -lt 159 || test ! -f "$DIR_CONF/vboxbow.conf"; then
+ load_vboxflt
+ else
+ # For S11 snv_159+ load vboxbow
+ load_vboxbow
+ fi
fi
# Load VBoxUSBMon, VBoxUSB
if test -f "$DIR_CONF/vboxusbmon.conf" && test "$HOST_OS_MAJORVERSION" != "5.10"; then
# For VirtualBox 3.1 the new USB code requires Nevada > 123
if test "$HOST_OS_MINORVERSION" -gt 123; then
+ # Add a group "vboxuser" (8-character limit) for USB access.
+ # All users which need host USB-passthrough support will have to be added to this group.
+ groupadd vboxuser >/dev/null 2>&1
+
add_driver "$MOD_VBOXUSBMON" "$DESC_VBOXUSBMON" "$FATALOP" "not-$NULLOP" "'* 0666 root sys'"
load_module "drv/$MOD_VBOXUSBMON" "$DESC_VBOXUSBMON" "$FATALOP"
+ chown root:vboxuser "/devices/pseudo/vboxusbmon@0:vboxusbmon"
+
# Add vboxusbmon to devlink.tab
- sed -e '/name=vboxusbmon/d' $PKG_INSTALL_ROOT/etc/devlink.tab > $PKG_INSTALL_ROOT/etc/devlink.vbox
- echo "type=ddi_pseudo;name=vboxusbmon \D" >> $PKG_INSTALL_ROOT/etc/devlink.vbox
- mv -f $PKG_INSTALL_ROOT/etc/devlink.vbox $PKG_INSTALL_ROOT/etc/devlink.tab
+ sed -e '/name=vboxusbmon/d' "$PKG_INSTALL_ROOT/etc/devlink.tab" > "$PKG_INSTALL_ROOT/etc/devlink.vbox"
+ echo "type=ddi_pseudo;name=vboxusbmon \D" >> "$PKG_INSTALL_ROOT/etc/devlink.vbox"
+ mv -f "$PKG_INSTALL_ROOT/etc/devlink.vbox" "$PKG_INSTALL_ROOT/etc/devlink.tab"
# Create the device link for non-remote installs
if test "$REMOTEINST" -eq 0; then
@@ -547,18 +611,18 @@ remove_drivers()
fatal=$1
# Remove vboxdrv from devlink.tab
- if test -f $PKG_INSTALL_ROOT/etc/devlink.tab; then
- devlinkfound=`cat $PKG_INSTALL_ROOT/etc/devlink.tab | grep vboxdrv`
+ if test -f "$PKG_INSTALL_ROOT/etc/devlink.tab"; then
+ devlinkfound=`cat "$PKG_INSTALL_ROOT/etc/devlink.tab" | grep vboxdrv`
if test -n "$devlinkfound"; then
- sed -e '/name=vboxdrv/d' $PKG_INSTALL_ROOT/etc/devlink.tab > $PKG_INSTALL_ROOT/etc/devlink.vbox
- mv -f $PKG_INSTALL_ROOT/etc/devlink.vbox $PKG_INSTALL_ROOT/etc/devlink.tab
+ sed -e '/name=vboxdrv/d' "$PKG_INSTALL_ROOT/etc/devlink.tab" > "$PKG_INSTALL_ROOT/etc/devlink.vbox"
+ mv -f "$PKG_INSTALL_ROOT/etc/devlink.vbox" "$PKG_INSTALL_ROOT/etc/devlink.tab"
fi
# Remove vboxusbmon from devlink.tab
- devlinkfound=`cat $PKG_INSTALL_ROOT/etc/devlink.tab | grep vboxusbmon`
+ devlinkfound=`cat "$PKG_INSTALL_ROOT/etc/devlink.tab" | grep vboxusbmon`
if test -n "$devlinkfound"; then
- sed -e '/name=vboxusbmon/d' $PKG_INSTALL_ROOT/etc/devlink.tab > $PKG_INSTALL_ROOT/etc/devlink.vbox
- mv -f $PKG_INSTALL_ROOT/etc/devlink.vbox $PKG_INSTALL_ROOT/etc/devlink.tab
+ sed -e '/name=vboxusbmon/d' "$PKG_INSTALL_ROOT/etc/devlink.tab" > "$PKG_INSTALL_ROOT/etc/devlink.vbox"
+ mv -f "$PKG_INSTALL_ROOT/etc/devlink.vbox" "$PKG_INSTALL_ROOT/etc/devlink.tab"
fi
fi
@@ -571,6 +635,9 @@ remove_drivers()
unload_module "$MOD_VBOXFLT" "$DESC_VBOXFLT" "$fatal"
rem_driver "$MOD_VBOXFLT" "$DESC_VBOXFLT" "$fatal"
+ unload_module "$MOD_VBOXBOW" "$DESC_VBOXBOW" "$fatal"
+ rem_driver "$MOD_VBOXBOW" "$DESC_VBOXBOW" "$fatal"
+
unload_module "$MOD_VBOXNET" "$DESC_VBOXNET" "$fatal"
rem_driver "$MOD_VBOXNET" "$DESC_VBOXNET" "$fatal"
@@ -582,14 +649,14 @@ remove_drivers()
# remove devlinks
if test -h "$PKG_INSTALL_ROOT/dev/vboxdrv" || test -f "$PKG_INSTALL_ROOT/dev/vboxdrv"; then
- rm -f $PKG_INSTALL_ROOT/dev/vboxdrv
+ rm -f "$PKG_INSTALL_ROOT/dev/vboxdrv"
fi
if test -h "$PKG_INSTALL_ROOT/dev/vboxusbmon" || test -f "$PKG_INSTALL_ROOT/dev/vboxusbmon"; then
- rm -f $PKG_INSTALL_ROOT/dev/vboxusbmon
+ rm -f "$PKG_INSTALL_ROOT/dev/vboxusbmon"
fi
# unpatch nwam/dhcpagent fix
- nwamfile=$PKG_INSTALL_ROOT/etc/nwam/llp
+ nwamfile="$PKG_INSTALL_ROOT/etc/nwam/llp"
nwambackupfile=$nwamfile.vbox
if test -f "$nwamfile"; then
sed -e '/vboxnet/d' $nwamfile > $nwambackupfile
@@ -597,13 +664,21 @@ remove_drivers()
fi
# remove netmask configuration
- nmaskfile=$PKG_INSTALL_ROOT/etc/netmasks
+ if test -h "$PKG_INSTALL_ROOT/etc/netmasks"; then
+ nmaskfile="$PKG_INSTALL_ROOT/etc/inet/netmasks"
+ else
+ nmaskfile="$PKG_INSTALL_ROOT/etc/netmasks"
+ fi
nmaskbackupfile=$nmaskfile.vbox
if test -f "$nmaskfile"; then
sed -e '/#VirtualBox_SectionStart/,/#VirtualBox_SectionEnd/d' $nmaskfile > $nmaskbackupfile
mv -f $nmaskbackupfile $nmaskfile
fi
+ if test $UPDATEBOOTARCHIVE -eq 1; then
+ update_boot_archive
+ fi
+
return 0
}
@@ -664,57 +739,44 @@ stop_process()
}
-# cleanup_install([fatal])
-# failure: depends on [fatal]
-cleanup_install()
+# stop_service(servicename, shortFMRI-suitable for grep, full FMRI)
+# failure: non fatal
+stop_service()
{
- fatal=$1
-
- # No-Op for remote installs
- if test "$REMOTEINST" -eq 1; then
- return 0
+ if test -z "$1" || test -z "$2" || test -z "$3"; then
+ errorprint "missing argument to stop_service()"
+ exit 1
fi
-
- # stop webservice
- servicefound=`$BIN_SVCS -a | grep "virtualbox/webservice" 2>/dev/null`
+ servicefound=`$BIN_SVCS -a | grep "$2" 2>/dev/null`
if test ! -z "$servicefound"; then
- $BIN_SVCADM disable -s svc:/application/virtualbox/webservice:default
+ $BIN_SVCADM disable -s $3
# Don't delete the manifest, this is handled by the manifest class action
- # $BIN_SVCCFG delete svc:/application/virtualbox/webservice:default
+ # $BIN_SVCCFG delete $3
if test "$?" -eq 0; then
- subprint "Unloaded: Web service"
+ subprint "Unloaded: $1"
else
- subprint "Unloading: Web service ...ERROR(S)."
+ subprint "Unloading: $1 ...ERROR(S)."
fi
fi
+}
- # stop balloonctrl
- servicefound=`$BIN_SVCS -a | grep "virtualbox/balloonctrl" 2>/dev/null`
- if test ! -z "$servicefound"; then
- $BIN_SVCADM disable -s svc:/application/virtualbox/balloonctrl:default
- # Don't delete the manifest, this is handled by the manifest class action
- # $BIN_SVCCFG delete svc:/application/virtualbox/balloonctrl:default
- if test "$?" -eq 0; then
- subprint "Unloaded: Balloon control service"
- else
- subprint "Unloading: Balloon control service ...ERROR(S)."
- fi
- fi
+# cleanup_install([fatal])
+# failure: depends on [fatal]
+cleanup_install()
+{
+ fatal=$1
- # stop zoneaccess service
- servicefound=`$BIN_SVCS -a | grep "virtualbox/zoneaccess" 2>/dev/null`
- if test ! -z "$servicefound"; then
- $BIN_SVCADM disable -s svc:/application/virtualbox/zoneaccess:default
- # Don't delete the manifest, this is handled by the manifest class action
- # $BIN_SVCCFG delete svc:/application/virtualbox/zoneaccess
- if test "$?" -eq 0; then
- subprint "Unloaded: Zone access service"
- else
- subprint "Unloading: Zone access service ...ERROR(S)."
- fi
+ # No-Op for remote installs
+ if test "$REMOTEINST" -eq 1; then
+ return 0
fi
+ # stop the services
+ stop_service "Web service" "virtualbox/webservice" "svc:/application/virtualbox/webservice:default"
+ stop_service "Balloon control service" "virtualbox/balloonctrl" "svc:/application/virtualbox/balloonctrl:default"
+ stop_service "Zone access service" "virtualbox/zoneaccess" "svc:/application/virtualbox/zoneaccess:default"
+
# unplumb all vboxnet instances for non-remote installs
inst=0
while test $inst -ne $MOD_VBOXNET_INST; do
@@ -754,14 +816,14 @@ cleanup_install()
# !! failure is always fatal
postinstall()
{
- infoprint "Detected Solaris $HOST_OS_MAJORVERSION Version $HOST_OS_MINORVERSION"
+ infoprint "Detected Solaris $HOST_OS_MAJORVERSION Version $HOST_OS_MINORVERSION"
infoprint "Loading VirtualBox kernel modules..."
install_drivers
if test "$?" -eq 0; then
if test -f "$DIR_CONF/vboxnet.conf"; then
# nwam/dhcpagent fix
- nwamfile=$PKG_INSTALL_ROOT/etc/nwam/llp
+ nwamfile="$PKG_INSTALL_ROOT/etc/nwam/llp"
nwambackupfile=$nwamfile.vbox
if test -f "$nwamfile"; then
sed -e '/vboxnet/d' $nwamfile > $nwambackupfile
@@ -779,15 +841,35 @@ postinstall()
# plumb and configure vboxnet0 for non-remote installs
if test "$REMOTEINST" -eq 0; then
- $BIN_IFCONFIG vboxnet0 plumb up
+ $BIN_IFCONFIG vboxnet0 plumb
+ $BIN_IFCONFIG vboxnet0 up
if test "$?" -eq 0; then
$BIN_IFCONFIG vboxnet0 192.168.56.1 netmask 255.255.255.0 up
+ # /etc/netmasks is a symlink, older installers replaced this with
+ # a copy of the actual file, repair that behaviour here.
+ recreatelink=0
+ if test -h "$PKG_INSTALL_ROOT/etc/netmasks"; then
+ nmaskfile="$PKG_INSTALL_ROOT/etc/inet/netmasks"
+ else
+ nmaskfile="$PKG_INSTALL_ROOT/etc/netmasks"
+ recreatelink=1
+ fi
+
# add the netmask to stay persistent across host reboots
- nmaskfile=$PKG_INSTALL_ROOT/etc/netmasks
nmaskbackupfile=$nmaskfile.vbox
if test -f $nmaskfile; then
sed -e '/#VirtualBox_SectionStart/,/#VirtualBox_SectionEnd/d' $nmaskfile > $nmaskbackupfile
+
+ if test $recreatelink -eq 1; then
+ # Check after removing our settings if /etc/netmasks is identifcal to /etc/inet/netmasks
+ anydiff=`diff $nmaskbackupfile "$PKG_INSTALL_ROOT/etc/inet/netmasks"`
+ if test ! -z "$anydiff"; then
+ # User may have some custom settings in /etc/netmasks, don't overwrite /etc/netmasks!
+ recreatelink=2
+ fi
+ fi
+
echo "#VirtualBox_SectionStart" >> $nmaskbackupfile
inst=0
networkn=56
@@ -798,6 +880,18 @@ postinstall()
done
echo "#VirtualBox_SectionEnd" >> $nmaskbackupfile
mv -f $nmaskbackupfile $nmaskfile
+
+ # Recreate /etc/netmasks as a link if necessary
+ if test $recreatelink -eq 1; then
+ cp -f "$PKG_INSTALL_ROOT/etc/netmasks" "$PKG_INSTALL_ROOT/etc/inet/netmasks"
+ ln -sf ./inet/netmasks "$PKG_INSTALL_ROOT/etc/netmasks"
+ elif test $recreatelink -eq 2; then
+ warnprint "/etc/netmasks is a symlink (to /etc/inet/netmasks) that older"
+ warnprint "VirtualBox installers incorrectly overwrote. Now the contents"
+ warnprint "of /etc/netmasks and /etc/inet/netmasks differ, therefore "
+ warnprint "VirtualBox will not attempt to overwrite /etc/netmasks as a"
+ warnprint "symlink to /etc/inet/netmasks. Please resolve this manually."
+ fi
fi
else
# Should this be fatal?
@@ -806,22 +900,20 @@ postinstall()
fi
fi
- if test -f $PKG_INSTALL_ROOT/var/svc/manifest/application/virtualbox/virtualbox-webservice.xml || test -f $PKG_INSTALL_ROOT/var/svc/manifest/application/virtualbox/virtualbox-zoneaccess.xml; then
+ if test -f "$PKG_INSTALL_ROOT/var/svc/manifest/application/virtualbox/virtualbox-webservice.xml" || test -f "$PKG_INSTALL_ROOT/var/svc/manifest/application/virtualbox/virtualbox-zoneaccess.xml"; then
infoprint "Configuring services..."
if test "$REMOTEINST" -eq 1; then
subprint "Skipped for targetted installs."
- fi
- fi
-
- # Enable Zone access service for non-remote installs, other services (Webservice) are delivered disabled by the manifest class action
- if test "$REMOTEINST" -eq 0; then
- servicefound=`$BIN_SVCS -a | grep "virtualbox/zoneaccess" | grep "disabled" 2>/dev/null`
- if test ! -z "$servicefound"; then
- /usr/sbin/svcadm enable -s svc:/application/virtualbox/zoneaccess
- if test "$?" -eq 0; then
- subprint "Loaded: Zone access service"
- else
- subprint "Loading Zone access service ...FAILED."
+ else
+ # Enable Zone access service for non-remote installs, other services (Webservice) are delivered disabled by the manifest class action
+ servicefound=`$BIN_SVCS -a | grep "virtualbox/zoneaccess" | grep "disabled" 2>/dev/null`
+ if test ! -z "$servicefound"; then
+ /usr/sbin/svcadm enable -s svc:/application/virtualbox/zoneaccess
+ if test "$?" -eq 0; then
+ subprint "Loaded: Zone access service"
+ else
+ subprint "Loading Zone access service ...FAILED."
+ fi
fi
fi
fi
@@ -829,8 +921,8 @@ postinstall()
# Update mime and desktop databases to get the right menu entries
# and icons. There is still some delay until the GUI picks it up,
# but that cannot be helped.
- if test -d $PKG_INSTALL_ROOT/usr/share/icons; then
- infoprint "Installing MIME types and icons"
+ if test -d "$PKG_INSTALL_ROOT/usr/share/icons"; then
+ infoprint "Installing MIME types and icons..."
if test "$REMOTEINST" -eq 0; then
/usr/bin/update-mime-database /usr/share/mime >/dev/null 2>&1
/usr/bin/update-desktop-database -q 2>/dev/null
@@ -878,14 +970,8 @@ postinstall()
warnprint "Skipped installing Python bindings. Run, as root, 'vboxapisetup.py install' manually from the booted system."
fi
- # Update boot archive
- infoprint "Updating the boot archive..."
- if test "$REMOTEINST" -eq 0; then
- $BIN_BOOTADM update-archive > /dev/null
- else
- $BIN_BOOTADM update-archive -R $PKG_INSTALL_ROOT > /dev/null
- fi
-
+ update_boot_archive
+
return 0
else
errorprint "Failed to install drivers"
@@ -971,6 +1057,7 @@ case "$drvop" in
;;
--setupdrivers)
remove_drivers "$fatal"
+ infoprint "Installing VirtualBox drivers:"
install_drivers
;;
*)
diff --git a/src/VBox/Installer/solaris/virtualbox.applications.in b/src/VBox/Installer/solaris/virtualbox.applications.in
index 054b0da2b..601d274c7 100644
--- a/src/VBox/Installer/solaris/virtualbox.applications.in
+++ b/src/VBox/Installer/solaris/virtualbox.applications.in
@@ -4,5 +4,5 @@ virtualbox
expects_uris=false
can_open_multiple_files=true
name=@VBOX_PRODUCT@
- mime_types=application/x-virtualbox-vbox;application/x-virtualbox-vbox-extpack;application/x-virtualbox-ovf;application/x-virtualbox-ova
+ mime_types=application/x-virtualbox-vbox;application/x-virtualbox-vbox-extpack;application/x-virtualbox-ovf;application/x-virtualbox-ova;application/x-virtualbox-vdi;application/x-virtualbox-vmdk;application/x-virtualbox-vhd;application/x-virtualbox-hdd
diff --git a/src/VBox/Installer/solaris/virtualbox.keys b/src/VBox/Installer/solaris/virtualbox.keys
index 37fb93c23..65ddd53e8 100644
--- a/src/VBox/Installer/solaris/virtualbox.keys
+++ b/src/VBox/Installer/solaris/virtualbox.keys
@@ -38,3 +38,42 @@ application/x-virtualbox-ovf
category=System
use_category_default=no
+application/x-virtualbox-vdi
+ icon_filename=virtualbox-vdi
+ description=Virtual Disk Image
+ default_action_type=none
+ short_list_application_ids_for_novice_user_level=virtualbox
+ short_list_application_ids_for_intermediate_user_level=virtualbox
+ short_list_application_ids_for_advanced_user_level=virtualbox
+ category=System
+ use_category_default=no
+
+application/x-virtualbox-vmdk
+ icon_filename=virtualbox-vmdk
+ description=Virtual Machine Disk Format
+ default_action_type=none
+ short_list_application_ids_for_novice_user_level=virtualbox
+ short_list_application_ids_for_intermediate_user_level=virtualbox
+ short_list_application_ids_for_advanced_user_level=virtualbox
+ category=System
+ use_category_default=no
+
+application/x-virtualbox-vhd
+ icon_filename=virtualbox-vhd
+ description=Virtual Hard Disk
+ default_action_type=none
+ short_list_application_ids_for_novice_user_level=virtualbox
+ short_list_application_ids_for_intermediate_user_level=virtualbox
+ short_list_application_ids_for_advanced_user_level=virtualbox
+ category=System
+ use_category_default=no
+
+application/x-virtualbox-hdd
+ icon_filename=virtualbox-hdd
+ description=Virtual Hard Disk
+ default_action_type=none
+ short_list_application_ids_for_novice_user_level=virtualbox
+ short_list_application_ids_for_intermediate_user_level=virtualbox
+ short_list_application_ids_for_advanced_user_level=virtualbox
+ category=System
+ use_category_default=no
diff --git a/src/VBox/Installer/solaris/virtualbox.mime b/src/VBox/Installer/solaris/virtualbox.mime
index fe4e699ff..7401f4c03 100644
--- a/src/VBox/Installer/solaris/virtualbox.mime
+++ b/src/VBox/Installer/solaris/virtualbox.mime
@@ -9,3 +9,15 @@ application/x-virtualbox-ovf:
application/x-virtualbox-ova:
ext: ova
+
+application/x-virtualbox-vdi:
+ ext: vdi
+
+application/x-virtualbox-vmdk:
+ ext: vmdk
+
+application/x-virtualbox-vhd:
+ ext: vhd
+
+application/x-virtualbox-hdd:
+ ext: hdd
diff --git a/src/VBox/Installer/win/InstallHelper/Makefile.kmk b/src/VBox/Installer/win/InstallHelper/Makefile.kmk
index 38fda620a..856bc6c04 100644
--- a/src/VBox/Installer/win/InstallHelper/Makefile.kmk
+++ b/src/VBox/Installer/win/InstallHelper/Makefile.kmk
@@ -1,10 +1,10 @@
-# $Id: Makefile.kmk $
+# $Id: Makefile.kmk 37053 2011-05-12 14:19:25Z vboxsync $
## @file
# Sub-Makefile for VBoxInstallHelper.dll.
#
#
-# Copyright (C) 2008-2010 Oracle Corporation
+# Copyright (C) 2008-2011 Oracle Corporation
#
# This file is part of VirtualBox Open Source Edition (OSE), as
# available from http://www.virtualbox.org. This file is free software;
@@ -36,9 +36,11 @@ endif
VBoxInstallHelper_SDKS = WINPSDK W2K3DDK
VBoxInstallHelper_LIBS = $(PATH_SDK_W2K3DDK_LIB)/Msi.lib
ifdef VBOX_WITH_NETFLT
- VBoxInstallHelper_LIBS += $(PATH_LIB)/WinNetConfig.lib \
+ VBoxInstallHelper_LIBS += \
+ $(PATH_LIB)/WinNetConfig.lib \
+ $(PATH_LIB)/VBoxDrvCfg.lib \
$(PATH_TOOL_$(VBOX_VCC_TOOL)_LIB)/comsupp.lib \
- $(PATH_SDK_WINPSDK_LIB)/WbemUuid.Lib
+ $(PATH_SDK_WINPSDK_LIB)/WbemUuid.Lib
endif
ifeq ($(KBUILD_TARGET),win)
diff --git a/src/VBox/Installer/win/InstallHelper/VBoxCommon.cpp b/src/VBox/Installer/win/InstallHelper/VBoxCommon.cpp
index efea76d75..a7fb8450f 100644
--- a/src/VBox/Installer/win/InstallHelper/VBoxCommon.cpp
+++ b/src/VBox/Installer/win/InstallHelper/VBoxCommon.cpp
@@ -1,4 +1,4 @@
-/* $Id: VBoxCommon.cpp $ */
+/* $Id: VBoxCommon.cpp 37289 2011-06-01 11:59:23Z vboxsync $ */
/** @file
* VBoxCommon - Misc helper routines for install helper.
*/
@@ -51,7 +51,6 @@ UINT VBoxGetProperty(MSIHANDLE a_hModule, TCHAR* a_pszName, TCHAR* a_pValue, DWO
ZeroMemory(a_pValue, a_dwSize);
uiRet = MsiGetProperty(a_hModule, a_pszName, a_pValue, &dwBuffer);
}
-
return uiRet;
}
diff --git a/src/VBox/Installer/win/InstallHelper/VBoxCommon.h b/src/VBox/Installer/win/InstallHelper/VBoxCommon.h
index 28ed47a68..2adb275e8 100644
--- a/src/VBox/Installer/win/InstallHelper/VBoxCommon.h
+++ b/src/VBox/Installer/win/InstallHelper/VBoxCommon.h
@@ -1,4 +1,4 @@
-/* $Id: VBoxCommon.h $ */
+/* $Id: VBoxCommon.h 32112 2010-08-31 08:44:09Z vboxsync $ */
/** @file
* VBoxCommon - Misc helper routines for install helper.
*/
diff --git a/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp b/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp
index a5c49fa27..e564add60 100644
--- a/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp
+++ b/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp
@@ -1,10 +1,10 @@
-/* $Id: VBoxInstallHelper.cpp $ */
+/* $Id: VBoxInstallHelper.cpp 37765 2011-07-04 13:54:00Z vboxsync $ */
/** @file
* VBoxInstallHelper - Various helper routines for Windows host installer.
*/
/*
- * Copyright (C) 2008-2010 Oracle Corporation
+ * Copyright (C) 2008-2011 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -16,7 +16,8 @@
*/
#ifdef VBOX_WITH_NETFLT
-# include "VBox/WinNetConfig.h"
+# include "VBox/VBoxNetCfg-win.h"
+# include "VBox/VBoxDrvCfg-win.h"
#endif /* VBOX_WITH_NETFLT */
#include <VBox/version.h>
@@ -59,17 +60,17 @@ BOOL APIENTRY DllMain(HANDLE hModule,
return TRUE;
}
-void LogString(MSIHANDLE hInstall, TCHAR* szString, ...)
+static void LogString(MSIHANDLE hInstall, LPCSTR szString, ...)
{
- PMSIHANDLE newHandle = ::MsiCreateRecord(2);
+ PMSIHANDLE newHandle = MsiCreateRecord(2);
- TCHAR szBuffer[1024] = {0};
+ char szBuffer[1024] = {0};
va_list pArgList;
va_start(pArgList, szString);
- _vsntprintf(szBuffer, sizeof(szBuffer) / sizeof(TCHAR), szString, pArgList);
+ _vsnprintf(szBuffer, sizeof(szBuffer) / sizeof(char), szString, pArgList);
va_end(pArgList);
- MsiRecordSetString(newHandle, 0, szBuffer);
+ MsiRecordSetStringA(newHandle, 0, szBuffer);
MsiProcessMessage(hInstall, INSTALLMESSAGE(INSTALLMESSAGE_INFO), newHandle);
MsiCloseHandle(newHandle);
@@ -80,7 +81,7 @@ void LogString(MSIHANDLE hInstall, TCHAR* szString, ...)
static void LogStringW(MSIHANDLE hInstall, LPCWSTR szString, ...)
{
- PMSIHANDLE newHandle = ::MsiCreateRecord(2);
+ PMSIHANDLE newHandle = MsiCreateRecord(2);
TCHAR szBuffer[1024] = {0};
va_list pArgList;
@@ -93,89 +94,92 @@ static void LogStringW(MSIHANDLE hInstall, LPCWSTR szString, ...)
MsiCloseHandle(newHandle);
}
-UINT __stdcall IsSerialCheckNeeded(MSIHANDLE a_hModule)
+UINT __stdcall IsSerialCheckNeeded(MSIHANDLE hModule)
{
#ifndef VBOX_OSE
- /*BOOL bRet =*/ serialCheckNeeded(a_hModule);
+ /*BOOL bRet =*/ serialCheckNeeded(hModule);
#endif
return ERROR_SUCCESS;
}
-UINT __stdcall CheckSerial(MSIHANDLE a_hModule)
+UINT __stdcall CheckSerial(MSIHANDLE hModule)
{
#ifndef VBOX_OSE
- /*BOOL bRet =*/ serialIsValid(a_hModule);
+ /*BOOL bRet =*/ serialIsValid(hModule);
#endif
return ERROR_SUCCESS;
}
-DWORD Exec(MSIHANDLE hModule, TCHAR* szAppName, TCHAR* szCmdLine, TCHAR* szWorkDir, DWORD* dwExitCode)
+DWORD Exec(MSIHANDLE hModule,
+ const TCHAR *pszAppName, TCHAR *pszCmdLine, const TCHAR *pszWorkDir,
+ DWORD *pdwExitCode)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
DWORD rc = ERROR_SUCCESS;
- ::ZeroMemory(&si, sizeof(si));
+ ZeroMemory(&si, sizeof(si));
si.dwFlags = STARTF_USESHOWWINDOW;
#ifdef UNICODE
si.dwFlags |= CREATE_UNICODE_ENVIRONMENT;
#endif
si.wShowWindow = SW_HIDE; /* For debugging: SW_SHOW; */
si.cb = sizeof(si);
- ::ZeroMemory(&pi, sizeof(pi));
-
- LogString(hModule, TEXT("Executing command line: %s %s (Working Dir: %s)"), szAppName, szCmdLine, szWorkDir == NULL ? L"Current" : szWorkDir);
-
- ::SetLastError(0);
- if (!::CreateProcess(szAppName, /* Module name. */
- szCmdLine, /* Command line. */
- NULL, /* Process handle not inheritable. */
- NULL, /* Thread handle not inheritable. */
- FALSE, /* Set handle inheritance to FALSE .*/
- 0, /* No creation flags. */
- NULL, /* Use parent's environment block. */
- szWorkDir, /* Use parent's starting directory. */
- &si, /* Pointer to STARTUPINFO structure. */
- &pi)) /* Pointer to PROCESS_INFORMATION structure. */
+ ZeroMemory(&pi, sizeof(pi));
+
+ LogStringW(hModule, TEXT("Executing command line: %s %s (Working Dir: %s)"),
+ pszAppName, pszCmdLine, pszWorkDir == NULL ? L"Current" : pszWorkDir);
+
+ SetLastError(0);
+ if (!CreateProcess(pszAppName, /* Module name. */
+ pszCmdLine, /* Command line. */
+ NULL, /* Process handle not inheritable. */
+ NULL, /* Thread handle not inheritable. */
+ FALSE, /* Set handle inheritance to FALSE .*/
+ 0, /* No creation flags. */
+ NULL, /* Use parent's environment block. */
+ pszWorkDir, /* Use parent's starting directory. */
+ &si, /* Pointer to STARTUPINFO structure. */
+ &pi)) /* Pointer to PROCESS_INFORMATION structure. */
{
- rc = ::GetLastError();
- LogString(hModule, TEXT("Executing command line: CreateProcess() failed! Error: %ld"), rc);
+ rc = GetLastError();
+ LogStringW(hModule, TEXT("Executing command line: CreateProcess() failed! Error: %ld"), rc);
return rc;
}
/* Wait until child process exits. */
- if (WAIT_FAILED == ::WaitForSingleObject(pi.hProcess, 30 * 1000 /* Wait 30 secs max. */))
+ if (WAIT_FAILED == WaitForSingleObject(pi.hProcess, 30 * 1000 /* Wait 30 secs max. */))
{
- rc = ::GetLastError();
- LogString(hModule, TEXT("Executing command line: WaitForSingleObject() failed! Error: %ld"), rc);
+ rc = GetLastError();
+ LogStringW(hModule, TEXT("Executing command line: WaitForSingleObject() failed! Error: %ld"), rc);
}
else
{
- if (0 == ::GetExitCodeProcess(pi.hProcess, dwExitCode))
+ if (!GetExitCodeProcess(pi.hProcess, pdwExitCode))
{
- rc = ::GetLastError();
- LogString(hModule, TEXT("Executing command line: GetExitCodeProcess() failed! Error: %ld"), rc);
+ rc = GetLastError();
+ LogStringW(hModule, TEXT("Executing command line: GetExitCodeProcess() failed! Error: %ld"), rc);
}
}
/* Close process and thread handles. */
- ::CloseHandle(pi.hProcess);
- ::CloseHandle(pi.hThread);
+ CloseHandle(pi.hProcess);
+ CloseHandle(pi.hThread);
- LogString(hModule, TEXT("Executing command returned: %ld (exit code %ld)"), rc, *dwExitCode);
+ LogStringW(hModule, TEXT("Executing command returned: %ld (exit code %ld)"), rc, *pdwExitCode);
return rc;
}
UINT __stdcall InstallPythonAPI(MSIHANDLE hModule)
{
- LogString(hModule, TEXT("InstallPythonAPI: Checking for installed Python environment ..."));
+ LogStringW(hModule, TEXT("InstallPythonAPI: Checking for installed Python environment ..."));
HKEY hkPythonCore = NULL;
- BOOL bInstalled = FALSE;
- LONG rc = ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Python\\PythonCore", 0, KEY_READ, &hkPythonCore);
+ BOOL bFound = FALSE;
+ LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Python\\PythonCore", 0, KEY_READ, &hkPythonCore);
if (rc != ERROR_SUCCESS)
{
- LogString(hModule, TEXT("InstallPythonAPI: No environment seems to be installed."));
+ LogStringW(hModule, TEXT("InstallPythonAPI: Python seems not to be installed."));
return ERROR_SUCCESS;
}
@@ -188,7 +192,7 @@ UINT __stdcall InstallPythonAPI(MSIHANDLE hModule)
DWORD dwLen = sizeof (szPath);
DWORD dwKeyType = REG_SZ;
- rc = ::RegEnumKeyEx(hkPythonCore, i, szRoot, &dwLen, NULL, NULL, NULL, NULL);
+ rc = RegEnumKeyEx(hkPythonCore, i, szRoot, &dwLen, NULL, NULL, NULL, NULL);
if (rc != ERROR_SUCCESS || dwLen <= 0)
break;
@@ -196,70 +200,88 @@ UINT __stdcall InstallPythonAPI(MSIHANDLE hModule)
dwLen = sizeof(szVal);
HKEY hkPythonInstPath = NULL;
- rc = ::RegOpenKeyEx(hkPythonCore, szPath, 0, KEY_READ, &hkPythonInstPath);
+ rc = RegOpenKeyEx(hkPythonCore, szPath, 0, KEY_READ, &hkPythonInstPath);
if (rc != ERROR_SUCCESS)
continue;
- rc = ::RegQueryValueEx(hkPythonInstPath, L"", NULL, &dwKeyType, (LPBYTE)szVal, &dwLen);
- if(rc == ERROR_SUCCESS)
- LogString(hModule, TEXT("InstallPythonAPI: Path \"%s\" detected."), szVal);
- }
+ rc = RegQueryValueEx(hkPythonInstPath, L"", NULL, &dwKeyType, (LPBYTE)szVal, &dwLen);
+ if (rc == ERROR_SUCCESS)
+ LogStringW(hModule, TEXT("InstallPythonAPI: Path \"%s\" detected."), szVal);
- ::RegCloseKey (hkPythonCore);
+ RegCloseKey(hkPythonInstPath);
+ }
+ RegCloseKey(hkPythonCore);
/* Python path found? */
TCHAR szExec[MAX_PATH] = { 0 };
TCHAR szCmdLine[MAX_PATH] = { 0 };
DWORD dwExitCode = 0;
- if (::_tcslen(szVal) > 0)
+ if (_tcslen(szVal) > 0)
{
/* Cool, check for installed Win32 extensions. */
- LogString(hModule, TEXT("InstallPythonAPI: Python installed. Checking for Win32 extensions ..."));
+ LogStringW(hModule, TEXT("InstallPythonAPI: Python installed. Checking for Win32 extensions ..."));
_stprintf_s(szExec, sizeof(szExec) / sizeof(TCHAR), L"%s\\python.exe", szVal);
_stprintf_s(szCmdLine, sizeof(szCmdLine) / sizeof(TCHAR), L"%s\\python.exe -c \"import win32api\"", szVal);
- if ( (0 == Exec(hModule, szExec, szCmdLine, NULL, &dwExitCode))
- && (0 == dwExitCode))
+ DWORD dwRetExec = Exec(hModule, szExec, szCmdLine, NULL, &dwExitCode);
+ if ( (ERROR_SUCCESS == dwRetExec)
+ && ( 0 == dwExitCode))
{
/* Did we get the correct error level (=0)? */
- LogString(hModule, TEXT("InstallPythonAPI: Win32 extensions installed."));
- bInstalled = TRUE;
+ LogStringW(hModule, TEXT("InstallPythonAPI: Win32 extensions installed."));
+ bFound = TRUE;
}
- else LogString(hModule, TEXT("InstallPythonAPI: Win32 extensions not found."));
+ else
+ LogStringW(hModule, TEXT("InstallPythonAPI: Win32 extensions not found."));
}
- if (bInstalled) /* Is Python and all required stuff installed? */
+ BOOL bInstalled = FALSE;
+ if (bFound) /* Is Python and all required stuff installed? */
{
/* Get the VBoxAPI setup string. */
- TCHAR szVBoxAPISetupPath[MAX_PATH] = {0};
- VBoxGetProperty(hModule, L"INSTALLDIR", szVBoxAPISetupPath, sizeof(szVBoxAPISetupPath));
+ TCHAR szPathTargetDir[MAX_PATH] = {0};
+ VBoxGetProperty(hModule, L"CustomActionData", szPathTargetDir, sizeof(szPathTargetDir));
+ if (_tcslen(szPathTargetDir))
+ {
- /* Set final path. */
- _stprintf_s(szPath, sizeof(szPath) / sizeof(TCHAR), L"%s\\sdk\\install", szVBoxAPISetupPath);
+ /* Set final path. */
+ _stprintf_s(szPath, sizeof(szPath) / sizeof(TCHAR), L"%s\\sdk\\install", szPathTargetDir);
- /* Install our API module. */
- _stprintf_s(szCmdLine, sizeof(szCmdLine) / sizeof(TCHAR), L"%s\\python.exe vboxapisetup.py install", szVal);
+ /* Install our API module. */
+ _stprintf_s(szCmdLine, sizeof(szCmdLine) / sizeof(TCHAR), L"%s\\python.exe vboxapisetup.py install", szVal);
- /* Set required environment variables. */
- if (!SetEnvironmentVariable(L"VBOX_INSTALL_PATH", szVBoxAPISetupPath))
- {
- LogString(hModule, TEXT("InstallPythonAPI: Cannot set environment variable VBOX_INSTALL_PATH!"));
- return FALSE;
- }
- else
- {
- if ( (0 == Exec(hModule, szExec, szCmdLine, szPath, &dwExitCode))
- && (0 == dwExitCode))
+ /* Set required environment variables. */
+ if (!SetEnvironmentVariable(L"VBOX_INSTALL_PATH", szPathTargetDir))
{
- /* All done! */
- LogString(hModule, TEXT("InstallPythonAPI: VBoxAPI for Python successfully installed."));
- return ERROR_SUCCESS;
+ LogStringW(hModule, TEXT("InstallPythonAPI: Could set environment variable VBOX_INSTALL_PATH!"));
+ }
+ else
+ {
+ DWORD dwRetExec = Exec(hModule, szExec, szCmdLine, szPath, &dwExitCode);
+ if ( (ERROR_SUCCESS == dwRetExec)
+ && ( 0 == dwExitCode))
+ {
+ /* All done! */
+ LogStringW(hModule, TEXT("InstallPythonAPI: VBoxAPI for Python successfully installed."));
+ bInstalled = TRUE;
+ }
+ else
+ {
+ if (dwRetExec)
+ LogStringW(hModule, TEXT("InstallPythonAPI: Error while executing installation of VBox API: %ld"), dwRetExec);
+ else
+ LogStringW(hModule, TEXT("InstallPythonAPI: Python reported an error while installing VBox API: %ld"), dwExitCode);
+ }
}
- else LogString(hModule, TEXT("InstallPythonAPI: Error while installing VBoxAPI: %ld"), dwExitCode);
}
+ else
+ LogStringW(hModule, TEXT("InstallPythonAPI: Unable to retrieve VBox installation path!"));
}
- LogString(hModule, TEXT("InstallPythonAPI: VBoxAPI not installed."));
+ VBoxSetProperty(hModule, L"PYTHON_INSTALLED", bInstalled ? L"1" : L"0");
+
+ if (!bInstalled)
+ LogStringW(hModule, TEXT("InstallPythonAPI: VBox API not installed."));
return ERROR_SUCCESS; /* Do not fail here. */
}
@@ -292,7 +314,7 @@ static LONG InstallBrandingValue(MSIHANDLE hModule,
(BYTE*)szValue,
(DWORD)wcslen(szValue));
if (rc != ERROR_SUCCESS)
- LogString(hModule, TEXT("InstallBranding: Could not write value %s! Error %ld"), pszValue, rc);
+ LogStringW(hModule, TEXT("InstallBranding: Could not write value %s! Error %ld"), pszValue, rc);
RegCloseKey (hkBranding);
}
}
@@ -320,12 +342,12 @@ UINT CopyDir(MSIHANDLE hModule, const TCHAR *pszDestDir, const TCHAR *pszSourceD
FOF_NOCONFIRMMKDIR |
FOF_NOERRORUI;
- LogString(hModule, TEXT("CopyDir: DestDir=%s, SourceDir=%s"),
+ LogStringW(hModule, TEXT("CopyDir: DestDir=%s, SourceDir=%s"),
szDest, szSource);
int r = SHFileOperation(&s);
if (r != 0)
{
- LogString(hModule, TEXT("CopyDir: Copy operation returned status 0x%x"), r);
+ LogStringW(hModule, TEXT("CopyDir: Copy operation returned status 0x%x"), r);
rc = ERROR_GEN_FAILURE;
}
else
@@ -349,11 +371,11 @@ UINT RemoveDir(MSIHANDLE hModule, const TCHAR *pszDestDir)
FOF_NOCONFIRMMKDIR |
FOF_NOERRORUI;
- LogString(hModule, TEXT("RemoveDir: DestDir=%s"), szDest);
+ LogStringW(hModule, TEXT("RemoveDir: DestDir=%s"), szDest);
int r = SHFileOperation(&s);
if (r != 0)
{
- LogString(hModule, TEXT("RemoveDir: Remove operation returned status 0x%x"), r);
+ LogStringW(hModule, TEXT("RemoveDir: Remove operation returned status 0x%x"), r);
rc = ERROR_GEN_FAILURE;
}
else
@@ -380,12 +402,12 @@ UINT RenameDir(MSIHANDLE hModule, const TCHAR *pszDestDir, const TCHAR *pszSourc
FOF_NOCONFIRMMKDIR |
FOF_NOERRORUI;
- LogString(hModule, TEXT("RenameDir: DestDir=%s, SourceDir=%s"),
+ LogStringW(hModule, TEXT("RenameDir: DestDir=%s, SourceDir=%s"),
szDest, szSource);
int r = SHFileOperation(&s);
if (r != 0)
{
- LogString(hModule, TEXT("RenameDir: Rename operation returned status 0x%x"), r);
+ LogStringW(hModule, TEXT("RenameDir: Rename operation returned status 0x%x"), r);
rc = ERROR_GEN_FAILURE;
}
else
@@ -396,12 +418,12 @@ UINT RenameDir(MSIHANDLE hModule, const TCHAR *pszDestDir, const TCHAR *pszSourc
UINT __stdcall UninstallBranding(MSIHANDLE hModule)
{
UINT rc;
- LogString(hModule, TEXT("UninstallBranding: Handling branding file ..."));
+ LogStringW(hModule, TEXT("UninstallBranding: Handling branding file ..."));
TCHAR szPathTargetDir[_MAX_PATH];
TCHAR szPathDest[_MAX_PATH];
- rc = VBoxGetProperty(hModule, L"INSTALLDIR", szPathTargetDir, sizeof(szPathTargetDir));
+ rc = VBoxGetProperty(hModule, L"CustomActionData", szPathTargetDir, sizeof(szPathTargetDir));
if (rc == ERROR_SUCCESS)
{
/** @todo Check trailing slash after %s. */
@@ -415,14 +437,14 @@ UINT __stdcall UninstallBranding(MSIHANDLE hModule)
}
}
- LogString(hModule, TEXT("UninstallBranding: Handling done."));
+ LogStringW(hModule, TEXT("UninstallBranding: Handling done."));
return ERROR_SUCCESS; /* Do not fail here. */
}
UINT __stdcall InstallBranding(MSIHANDLE hModule)
{
UINT rc;
- LogString(hModule, TEXT("InstallBranding: Handling branding file ..."));
+ LogStringW(hModule, TEXT("InstallBranding: Handling branding file ..."));
TCHAR szPathMSI[_MAX_PATH];
TCHAR szPathTargetDir[_MAX_PATH];
@@ -431,22 +453,25 @@ UINT __stdcall InstallBranding(MSIHANDLE hModule)
TCHAR szPathDest[_MAX_PATH];
rc = VBoxGetProperty(hModule, L"SOURCEDIR", szPathMSI, sizeof(szPathMSI));
- rc = VBoxGetProperty(hModule, L"INSTALLDIR", szPathTargetDir, sizeof(szPathTargetDir));
if (rc == ERROR_SUCCESS)
{
- /** @todo Check for trailing slash after %s. */
- _stprintf_s(szPathDest, sizeof(szPathDest) / sizeof(TCHAR), L"%s", szPathTargetDir);
- _stprintf_s(szPathSource, sizeof(szPathSource) / sizeof(TCHAR), L"%s.custom", szPathMSI);
- rc = CopyDir(hModule, szPathDest, szPathSource);
+ rc = VBoxGetProperty(hModule, L"CustomActionData", szPathTargetDir, sizeof(szPathTargetDir));
if (rc == ERROR_SUCCESS)
{
- _stprintf_s(szPathDest, sizeof(szPathDest) / sizeof(TCHAR), L"%scustom", szPathTargetDir);
- _stprintf_s(szPathSource, sizeof(szPathSource) / sizeof(TCHAR), L"%s.custom", szPathTargetDir);
- rc = RenameDir(hModule, szPathDest, szPathSource);
+ /** @todo Check for trailing slash after %s. */
+ _stprintf_s(szPathDest, sizeof(szPathDest) / sizeof(TCHAR), L"%s", szPathTargetDir);
+ _stprintf_s(szPathSource, sizeof(szPathSource) / sizeof(TCHAR), L"%s.custom", szPathMSI);
+ rc = CopyDir(hModule, szPathDest, szPathSource);
+ if (rc == ERROR_SUCCESS)
+ {
+ _stprintf_s(szPathDest, sizeof(szPathDest) / sizeof(TCHAR), L"%scustom", szPathTargetDir);
+ _stprintf_s(szPathSource, sizeof(szPathSource) / sizeof(TCHAR), L"%s.custom", szPathTargetDir);
+ rc = RenameDir(hModule, szPathDest, szPathSource);
+ }
}
}
- LogString(hModule, TEXT("InstallBranding: Handling done."));
+ LogStringW(hModule, TEXT("InstallBranding: Handling done."));
return ERROR_SUCCESS; /* Do not fail here. */
}
@@ -456,82 +481,80 @@ UINT __stdcall InstallBranding(MSIHANDLE hModule)
#define VBOX_NETCFG_APP_NAME L"VirtualBox Installer"
#define VBOX_NETCFG_MAX_RETRIES 10
#define NETFLT_PT_INF_REL_PATH L"drivers\\network\\netflt\\VBoxNetFlt.inf"
-#define NETFLT_MP_INF_REL_PATH L"drivers\\network\\netflt\\VBoxNetFlt_m.inf"
+#define NETFLT_MP_INF_REL_PATH L"drivers\\network\\netflt\\VBoxNetFltM.inf"
#define NETFLT_ID L"sun_VBoxNetFlt" /** @todo Needs to be changed (?). */
#define NETADP_ID L"sun_VBoxNetAdp" /** @todo Needs to be changed (?). */
static MSIHANDLE g_hCurrentModule = NULL;
-static VOID winNetCfgLogger(LPCWSTR szString)
+
+static VOID netCfgLoggerCallback(LPCSTR szString)
+{
+ if (g_hCurrentModule)
+ LogString(g_hCurrentModule, szString);
+}
+
+static VOID netCfgLoggerDisable()
{
- Assert(g_hCurrentModule);
- if(g_hCurrentModule)
+ if (g_hCurrentModule)
{
- LogStringW(g_hCurrentModule, szString);
+ VBoxNetCfgWinSetLogging((LOG_ROUTINE)NULL);
+ g_hCurrentModule = NULL;
}
}
-static VOID inintWinNetCfgLogger(MSIHANDLE hModule)
+static VOID netCfgLoggerEnable(MSIHANDLE hModule)
{
- Assert(!g_hCurrentModule);
Assert(hModule);
- g_hCurrentModule = hModule;
-
- VBoxNetCfgWinSetLogging((LOG_ROUTINE)winNetCfgLogger);
-}
-
-static VOID finiWinNetCfgLogger()
-{
- Assert(g_hCurrentModule);
+ if (g_hCurrentModule)
+ netCfgLoggerDisable();
- VBoxNetCfgWinSetLogging((LOG_ROUTINE)NULL);
+ g_hCurrentModule = hModule;
- g_hCurrentModule = NULL;
+ VBoxNetCfgWinSetLogging((LOG_ROUTINE)netCfgLoggerCallback);
}
-static UINT Hresult2Error(MSIHANDLE hModule, HRESULT hr)
+static UINT ErrorConvertFromHResult(MSIHANDLE hModule, HRESULT hr)
{
- switch(hr)
+ UINT uRet;
+ switch (hr)
{
case S_OK:
- return ERROR_SUCCESS;
+ uRet = ERROR_SUCCESS;
+ break;
+
case NETCFG_S_REBOOT:
- LogString(hModule, TEXT("Reboot required, setting REBOOT property to Force"));
- if(MsiSetProperty(hModule, TEXT("REBOOT"), TEXT("Force")) != ERROR_SUCCESS)
- {
- LogString(hModule, TEXT("Failed to set REBOOT property"));
- return ERROR_GEN_FAILURE;
- }
- return ERROR_SUCCESS;
+ {
+ LogStringW(hModule, TEXT("Reboot required, setting REBOOT property to Force"));
+ HRESULT hr2 = MsiSetProperty(hModule, TEXT("REBOOT"), TEXT("Force"));
+ if (hr2 != ERROR_SUCCESS)
+ LogStringW(hModule, TEXT("Failed to set REBOOT property, error = 0x%x"), hr2);
+ uRet = ERROR_SUCCESS; /* Never fail here. */
+ break;
+ }
+
default:
- LogString(hModule, TEXT("converting hresult (0x%x) to ERROR_GEN_FAILURE"), hr);
- return ERROR_GEN_FAILURE;
+ LogStringW(hModule, TEXT("Converting unhandled HRESULT (0x%x) to ERROR_GEN_FAILURE"), hr);
+ uRet = ERROR_GEN_FAILURE;
}
+ return uRet;
}
static MSIHANDLE createNetCfgLockedMsgRecord(MSIHANDLE hModule)
{
MSIHANDLE hRecord = MsiCreateRecord(2);
- Assert(hRecord);
- if(hRecord)
+ if (hRecord)
{
- do
+ UINT uErr = MsiRecordSetInteger(hRecord, 1, 25001);
+ if (uErr != ERROR_SUCCESS)
{
- UINT r = MsiRecordSetInteger(hRecord, 1, 25001);
- Assert(r == ERROR_SUCCESS);
- if(r != ERROR_SUCCESS)
- {
- LogString(hModule, TEXT("createNetCfgLockedMsgRecord: MsiRecordSetInteger failed, r (0x%x)"), r);
- MsiCloseHandle(hRecord);
- hRecord = NULL;
- break;
- }
- }while(0);
+ LogStringW(hModule, TEXT("createNetCfgLockedMsgRecord: MsiRecordSetInteger failed, error = 0x%x"), uErr);
+ MsiCloseHandle(hRecord);
+ hRecord = NULL;
+ }
}
else
- {
- LogString(hModule, TEXT("createNetCfgLockedMsgRecord: failed to create a record"));
- }
+ LogStringW(hModule, TEXT("createNetCfgLockedMsgRecord: Failed to create a record"));
return hRecord;
}
@@ -539,31 +562,27 @@ static MSIHANDLE createNetCfgLockedMsgRecord(MSIHANDLE hModule)
static UINT doNetCfgInit(MSIHANDLE hModule, INetCfg **ppnc, BOOL bWrite)
{
MSIHANDLE hMsg = NULL;
- UINT r = ERROR_GEN_FAILURE;
+ UINT uErr = ERROR_GEN_FAILURE;
int MsgResult;
int cRetries = 0;
do
{
LPWSTR lpszLockedBy;
- HRESULT hr = VBoxNetCfgWinQueryINetCfg(bWrite, VBOX_NETCFG_APP_NAME, ppnc, &lpszLockedBy);
- if(hr != NETCFG_E_NO_WRITE_LOCK)
+ HRESULT hr = VBoxNetCfgWinQueryINetCfg(ppnc, bWrite, VBOX_NETCFG_APP_NAME, 10000, &lpszLockedBy);
+ if (hr != NETCFG_E_NO_WRITE_LOCK)
{
- Assert(hr == S_OK);
- if(hr != S_OK)
- {
- LogString(hModule, TEXT("doNetCfgInit: VBoxNetCfgWinQueryINetCfg failed, hr (0x%x)"), hr);
- }
- r = Hresult2Error(hModule, hr);
+ if (FAILED(hr))
+ LogStringW(hModule, TEXT("doNetCfgInit: VBoxNetCfgWinQueryINetCfg failed, error = 0x%x"), hr);
+ uErr = ErrorConvertFromHResult(hModule, hr);
break;
}
/* hr == NETCFG_E_NO_WRITE_LOCK */
- Assert(lpszLockedBy);
- if(!lpszLockedBy)
+ if (!lpszLockedBy)
{
- LogString(hModule, TEXT("doNetCfgInit: lpszLockedBy == NULL, breaking"));
+ LogStringW(hModule, TEXT("doNetCfgInit: lpszLockedBy == NULL, breaking"));
break;
}
@@ -573,21 +592,21 @@ static UINT doNetCfgInit(MSIHANDLE hModule, INetCfg **ppnc, BOOL bWrite)
* however it seems unneeded for most cases, e.g. in case some network connection property
* dialog is opened, it would be better to post a notification to the user as soon as possible
* rather than waiting for a longer period of time before displaying it */
- if(cRetries < VBOX_NETCFG_MAX_RETRIES
- && !wcscmp(lpszLockedBy, L"6to4svc.dll"))
+ if ( cRetries < VBOX_NETCFG_MAX_RETRIES
+ && !wcscmp(lpszLockedBy, L"6to4svc.dll"))
{
cRetries++;
- LogString(hModule, TEXT("doNetCfgInit: lpszLockedBy is 6to4svc.dll, retrying %d out of %d"), cRetries, VBOX_NETCFG_MAX_RETRIES);
+ LogStringW(hModule, TEXT("doNetCfgInit: lpszLockedBy is 6to4svc.dll, retrying %d out of %d"), cRetries, VBOX_NETCFG_MAX_RETRIES);
MsgResult = IDRETRY;
}
else
{
- if(!hMsg)
+ if (!hMsg)
{
hMsg = createNetCfgLockedMsgRecord(hModule);
- if(!hMsg)
+ if (!hMsg)
{
- LogString(hModule, TEXT("doNetCfgInit: failed to create a message record, breaking"));
+ LogStringW(hModule, TEXT("doNetCfgInit: Failed to create a message record, breaking"));
CoTaskMemFree(lpszLockedBy);
break;
}
@@ -595,57 +614,62 @@ static UINT doNetCfgInit(MSIHANDLE hModule, INetCfg **ppnc, BOOL bWrite)
UINT rTmp = MsiRecordSetStringW(hMsg, 2, lpszLockedBy);
Assert(rTmp == ERROR_SUCCESS);
- if(rTmp != ERROR_SUCCESS)
+ if (rTmp != ERROR_SUCCESS)
{
- LogString(hModule, TEXT("doNetCfgInit: MsiRecordSetStringW failed, r (0x%x)"), rTmp);
+ LogStringW(hModule, TEXT("doNetCfgInit: MsiRecordSetStringW failed, error = 0x%x"), rTmp);
CoTaskMemFree(lpszLockedBy);
break;
}
MsgResult = MsiProcessMessage(hModule, (INSTALLMESSAGE)(INSTALLMESSAGE_USER | MB_RETRYCANCEL), hMsg);
Assert(MsgResult == IDRETRY || MsgResult == IDCANCEL);
- LogString(hModule, TEXT("doNetCfgInit: MsiProcessMessage returned (0x%x)"), MsgResult);
+ LogStringW(hModule, TEXT("doNetCfgInit: MsiProcessMessage returned (0x%x)"), MsgResult);
}
CoTaskMemFree(lpszLockedBy);
} while(MsgResult == IDRETRY);
- if(hMsg)
- {
+ if (hMsg)
MsiCloseHandle(hMsg);
- }
- return r;
+ return uErr;
}
-static UINT vboxNetFltQueryInfArray(MSIHANDLE hModule, OUT LPWSTR *apInfFullPaths, PUINT pcInfs, DWORD cSize)
+static UINT vboxNetFltQueryInfArray(MSIHANDLE hModule, OUT LPWSTR *apInfFullPaths, PUINT pcInfs, DWORD dwSize)
{
- UINT r;
- Assert(*pcInfs >= 2);
- if(*pcInfs >= 2)
+ UINT uErr;
+ if (*pcInfs >= 2)
{
*pcInfs = 2;
- r = MsiGetPropertyW(hModule, L"CustomActionData", apInfFullPaths[0], &cSize);
- Assert(r == ERROR_SUCCESS);
- if(r == ERROR_SUCCESS)
+
+ DWORD dwBuf = dwSize;
+ uErr = MsiGetPropertyW(hModule, L"CustomActionData", apInfFullPaths[0], &dwBuf);
+ if ( uErr == ERROR_SUCCESS
+ && dwBuf)
{
+ /** @todo r=andy Avoid wcscpy and wcsncat, can cause buffer overruns! */
wcscpy(apInfFullPaths[1], apInfFullPaths[0]);
wcsncat(apInfFullPaths[0], NETFLT_PT_INF_REL_PATH, sizeof(NETFLT_PT_INF_REL_PATH));
+ LogStringW(hModule, TEXT("vboxNetFltQueryInfArray: INF 1: %s"), apInfFullPaths[0]);
+
wcsncat(apInfFullPaths[1], NETFLT_MP_INF_REL_PATH, sizeof(NETFLT_MP_INF_REL_PATH));
+ LogStringW(hModule, TEXT("vboxNetFltQueryInfArray: INF 2: %s"), apInfFullPaths[1]);
}
else
{
- LogString(hModule, TEXT("vboxNetFltQueryInfArray: MsiGetPropertyW failes, r (%d)"), r);
+ if (uErr != ERROR_SUCCESS)
+ LogStringW(hModule, TEXT("vboxNetFltQueryInfArray: MsiGetPropertyW failed, error = 0x%x"), uErr);
+ else
+ LogStringW(hModule, TEXT("vboxNetFltQueryInfArray: Empty installation directory"));
}
}
else
{
- r = ERROR_GEN_FAILURE;
- LogString(hModule, TEXT("vboxNetFltQueryInfArray: buffer array size is < 2 : (%d)"), *pcInfs);
- *pcInfs = 2;
+ uErr = ERROR_BUFFER_OVERFLOW;
+ LogStringW(hModule, TEXT("vboxNetFltQueryInfArray: Buffer array size is < 2 (%u)"), *pcInfs);
}
- return r;
+ return uErr;
}
#endif /*VBOX_WITH_NETFLT*/
@@ -653,135 +677,106 @@ static UINT vboxNetFltQueryInfArray(MSIHANDLE hModule, OUT LPWSTR *apInfFullPath
UINT __stdcall UninstallNetFlt(MSIHANDLE hModule)
{
#ifdef VBOX_WITH_NETFLT
- INetCfg *pnc;
- UINT r;
+ INetCfg *pNetCfg;
+ UINT uErr;
- inintWinNetCfgLogger(hModule);
+ netCfgLoggerEnable(hModule);
BOOL bOldIntMode = SetupSetNonInteractiveMode(FALSE);
__try
{
- LogString(hModule, TEXT("Uninstalling NetFlt"));
+ LogStringW(hModule, TEXT("Uninstalling NetFlt"));
- r = doNetCfgInit(hModule, &pnc, TRUE);
- Assert(r == ERROR_SUCCESS);
- if(r == ERROR_SUCCESS)
+ uErr = doNetCfgInit(hModule, &pNetCfg, TRUE);
+ if (uErr == ERROR_SUCCESS)
{
- HRESULT hr = VBoxNetCfgWinNetFltUninstall(pnc);
- Assert(hr == S_OK);
- if(hr != S_OK)
- {
- LogString(hModule, TEXT("UninstallNetFlt: VBoxNetCfgWinUninstallComponent failed, hr (0x%x)"), hr);
- }
+ HRESULT hr = VBoxNetCfgWinNetFltUninstall(pNetCfg);
+ if (hr != S_OK)
+ LogStringW(hModule, TEXT("UninstallNetFlt: VBoxNetCfgWinUninstallComponent failed, error = 0x%x"), hr);
- r = Hresult2Error(hModule, hr);
+ uErr = ErrorConvertFromHResult(hModule, hr);
- VBoxNetCfgWinReleaseINetCfg(pnc, TRUE);
+ VBoxNetCfgWinReleaseINetCfg(pNetCfg, TRUE);
- /* Never fail the uninstall */
- r = ERROR_SUCCESS;
+ LogStringW(hModule, TEXT("Uninstalling NetFlt done, error = 0x%x"), uErr);
+
+ /* Never fail on uninstall. */
+ uErr = ERROR_SUCCESS;
}
else
- {
- LogString(hModule, TEXT("UninstallNetFlt: doNetCfgInit failed, r (0x%x)"), r);
- }
-
- LogString(hModule, TEXT("Uninstalling NetFlt done, r (0x%x)"), r);
+ LogStringW(hModule, TEXT("UninstallNetFlt: doNetCfgInit failed, error = 0x%x"), uErr);
}
__finally
{
- if(bOldIntMode)
+ if (bOldIntMode)
{
- /* the prev mode != FALSE, i.e. non-interactive */
+ /* The prev mode != FALSE, i.e. non-interactive. */
SetupSetNonInteractiveMode(bOldIntMode);
}
- finiWinNetCfgLogger();
+ netCfgLoggerDisable();
}
+#endif /* VBOX_WITH_NETFLT */
+ /* Never fail the install even if we did not succeed. */
return ERROR_SUCCESS;
-#else /* not defined VBOX_WITH_NETFLT */
- return ERROR_SUCCESS;
-#endif /* VBOX_WITH_NETFLT */
}
UINT __stdcall InstallNetFlt(MSIHANDLE hModule)
{
#ifdef VBOX_WITH_NETFLT
- UINT r;
- INetCfg *pnc;
+ UINT uErr;
+ INetCfg *pNetCfg;
- inintWinNetCfgLogger(hModule);
+ netCfgLoggerEnable(hModule);
BOOL bOldIntMode = SetupSetNonInteractiveMode(FALSE);
__try
{
- LogString(hModule, TEXT("Installing NetFlt"));
+ LogStringW(hModule, TEXT("Installing NetFlt"));
- r = doNetCfgInit(hModule, &pnc, TRUE);
- Assert(r == ERROR_SUCCESS);
- if(r == ERROR_SUCCESS)
+ uErr = doNetCfgInit(hModule, &pNetCfg, TRUE);
+ if (uErr == ERROR_SUCCESS)
{
WCHAR PtInf[MAX_PATH];
WCHAR MpInf[MAX_PATH];
DWORD sz = sizeof(PtInf);
LPWSTR aInfs[] = {PtInf, MpInf};
UINT cInfs = 2;
-
- r = vboxNetFltQueryInfArray(hModule, aInfs, &cInfs, sz);
- Assert(r == ERROR_SUCCESS);
- Assert(cInfs == 2);
- if(r == ERROR_SUCCESS)
+ uErr = vboxNetFltQueryInfArray(hModule, aInfs, &cInfs, sz);
+ if (uErr == ERROR_SUCCESS)
{
- // HRESULT hr = VBoxNetCfgWinInstallSpecifiedComponent (
- // pnc,
- // (LPCWSTR*)aInfs,
- // cInfs,
- // NETFLT_ID,
- // &GUID_DEVCLASS_NETSERVICE,
- // true);
- HRESULT hr = VBoxNetCfgWinNetFltInstall(pnc, (LPCWSTR*)aInfs, cInfs);
- Assert(hr == S_OK);
- if(hr != S_OK)
- {
- LogString(hModule, TEXT("InstallNetFlt: VBoxNetCfgWinInstallSpecifiedComponent failed, hr (0x%x)"), hr);
- }
+ HRESULT hr = VBoxNetCfgWinNetFltInstall(pNetCfg, (LPCWSTR*)aInfs, cInfs);
+ if (FAILED(hr))
+ LogStringW(hModule, TEXT("InstallNetFlt: VBoxNetCfgWinNetFltInstall failed, error = 0x%x"), hr);
- r = Hresult2Error(hModule, hr);
+ uErr = ErrorConvertFromHResult(hModule, hr);
}
else
- {
- LogString(hModule, TEXT("InstallNetFlt: vboxNetFltQueryInfArray failed, r (0x%x)"), r);
- }
+ LogStringW(hModule, TEXT("InstallNetFlt: vboxNetFltQueryInfArray failed, error = 0x%x"), uErr);
- VBoxNetCfgWinReleaseINetCfg(pnc, TRUE);
+ VBoxNetCfgWinReleaseINetCfg(pNetCfg, TRUE);
- /* Never fail the uninstall */
- r = ERROR_SUCCESS;
+ LogStringW(hModule, TEXT("Installing NetFlt done"));
}
else
- {
- LogString(hModule, TEXT("InstallNetFlt: doNetCfgInit failed, r (0x%x)"), r);
- }
-
- LogString(hModule, TEXT("Installing NetFlt done, r (0x%x)"), r);
+ LogStringW(hModule, TEXT("InstallNetFlt: doNetCfgInit failed, error = 0x%x"), uErr);
}
__finally
{
- if(bOldIntMode)
+ if (bOldIntMode)
{
- /* the prev mode != FALSE, i.e. non-interactive */
+ /* The prev mode != FALSE, i.e. non-interactive. */
SetupSetNonInteractiveMode(bOldIntMode);
}
- finiWinNetCfgLogger();
+ netCfgLoggerDisable();
}
+#endif /* VBOX_WITH_NETFLT */
+ /* Never fail the install even if we did not succeed. */
return ERROR_SUCCESS;
-#else /* not defined VBOX_WITH_NETFLT */
- return ERROR_SUCCESS;
-#endif /* VBOX_WITH_NETFLT */
}
#if 0
@@ -790,7 +785,7 @@ static BOOL RenameHostOnlyConnectionsCallback(HDEVINFO hDevInfo, PSP_DEVINFO_DAT
WCHAR DevName[256];
DWORD winEr;
- if(SetupDiGetDeviceRegistryPropertyW(hDevInfo, pDev,
+ if (SetupDiGetDeviceRegistryPropertyW(hDevInfo, pDev,
SPDRP_FRIENDLYNAME , /* IN DWORD Property,*/
NULL, /*OUT PDWORD PropertyRegDataType, OPTIONAL*/
(PBYTE)DevName, /*OUT PBYTE PropertyBuffer,*/
@@ -817,14 +812,14 @@ static BOOL RenameHostOnlyConnectionsCallback(HDEVINFO hDevInfo, PSP_DEVINFO_DAT
&cbGuid /*guid__inout_opt LPDWORD lpcbData*/
);
Assert(winEr == ERROR_SUCCESS);
- if(winEr == ERROR_SUCCESS)
+ if (winEr == ERROR_SUCCESS)
{
WCHAR ConnectoinName[128];
ULONG cbName = sizeof(ConnectoinName);
HRESULT hr = VBoxNetCfgWinGenHostonlyConnectionName (DevName, ConnectoinName, &cbName);
Assert(hr == S_OK);
- if(hr == S_OK)
+ if (SUCCEEDED(hr))
{
hr = VBoxNetCfgWinRenameConnection (guid, ConnectoinName);
Assert(hr == S_OK);
@@ -845,18 +840,17 @@ static BOOL RenameHostOnlyConnectionsCallback(HDEVINFO hDevInfo, PSP_DEVINFO_DAT
UINT __stdcall CreateHostOnlyInterface(MSIHANDLE hModule)
{
#ifdef VBOX_WITH_NETFLT
- inintWinNetCfgLogger(hModule);
+ netCfgLoggerEnable(hModule);
- BOOL bPrevMode = SetupSetNonInteractiveMode(FALSE);
+ BOOL bSetupModeInteractive = SetupSetNonInteractiveMode(FALSE);
bool bSetStaticIp = true;
- LogString(hModule, TEXT("Creating Host-Only Interface"));
+ LogStringW(hModule, TEXT("Creating host-only interface"));
HRESULT hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(NETADP_ID);
- Assert(hr == S_OK);
- if(hr != S_OK)
+ if (FAILED(hr))
{
- LogString(hModule, TEXT("CreateHostOnlyInterface: VBoxNetCfgWinRemoveAllNetDevicesOfId failed, hr (0x%x)"), hr);
+ LogStringW(hModule, TEXT("CreateHostOnlyInterface: VBoxNetCfgWinRemoveAllNetDevicesOfId failed, error = 0x%x"), hr);
bSetStaticIp = false;
}
@@ -865,159 +859,145 @@ UINT __stdcall CreateHostOnlyInterface(MSIHANDLE hModule)
DWORD cSize = sizeof(MpInf)/sizeof(MpInf[0]);
LPCWSTR pInfPath = NULL;
bool bIsFile = false;
- UINT r = MsiGetPropertyW(hModule, L"CustomActionData", MpInf, &cSize);
- Assert(r == ERROR_SUCCESS);
- if(r == ERROR_SUCCESS)
+ UINT uErr = MsiGetPropertyW(hModule, L"CustomActionData", MpInf, &cSize);
+ if (uErr == ERROR_SUCCESS)
{
- LogString(hModule, TEXT("NetAdpDir property: (%s)"), MpInf);
- if(cSize)
+ if (cSize)
{
- if(MpInf[cSize-1] != L'\\')
+ LogStringW(hModule, TEXT("CreateHostOnlyInterface: NetAdpDir property = %s"), MpInf);
+ if (MpInf[cSize-1] != L'\\')
{
MpInf[cSize] = L'\\';
++cSize;
MpInf[cSize] = L'\0';
}
-// wcscat(MpInf, L"VBoxNetFlt.inf");
+
+ /** @todo r=andy Avoid wcscat, can cause buffer overruns! */
wcscat(MpInf, L"drivers\\network\\netadp\\VBoxNetAdp.inf");
pInfPath = MpInf;
bIsFile = true;
- LogString(hModule, TEXT("Resulting inf path is: (%s)"), pInfPath);
+
+ LogStringW(hModule, TEXT("CreateHostOnlyInterface: Resulting INF path = %s"), pInfPath);
}
else
- {
- LogString(hModule, TEXT("CreateHostOnlyInterface: NetAdpDir property value is empty"));
- }
+ LogStringW(hModule, TEXT("CreateHostOnlyInterface: NetAdpDir property value is empty"));
}
else
- {
- LogString(hModule, TEXT("CreateHostOnlyInterface: failed to get NetAdpDir property, r(%d)"), r);
- }
+ LogStringW(hModule, TEXT("CreateHostOnlyInterface: Failed to get NetAdpDir property, error = 0x%x"), uErr);
- /* make sure the inf file is installed */
- if(!!pInfPath && bIsFile)
+ /* Make sure the inf file is installed. */
+ if (!!pInfPath && bIsFile)
{
- HRESULT tmpHr = VBoxNetCfgWinInstallInf(pInfPath);
- Assert(tmpHr == S_OK);
+ hr = VBoxDrvCfgInfInstall(pInfPath);
+ if (FAILED(hr))
+ LogStringW(hModule, TEXT("CreateHostOnlyInterface: Failed to install INF file, error = 0x%x"), hr);
}
- hr = VBoxNetCfgWinCreateHostOnlyNetworkInterface (pInfPath, bIsFile, &guid, NULL, NULL);
- Assert(hr == S_OK);
- if(hr == S_OK)
+ if (SUCCEEDED(hr))
{
- ULONG ip = inet_addr("192.168.56.1");
- ULONG mask = inet_addr("255.255.255.0");
-
- hr = VBoxNetCfgWinEnableStaticIpConfig(&guid, ip, mask);
- Assert(hr == S_OK);
- if(hr != S_OK)
+ hr = VBoxNetCfgWinCreateHostOnlyNetworkInterface(pInfPath, bIsFile, &guid, NULL, NULL);
+ if (SUCCEEDED(hr))
{
- LogString(hModule, TEXT("CreateHostOnlyInterface: VBoxNetCfgWinEnableStaticIpConfig failed, hr (0x%x)"), hr);
+ ULONG ip = inet_addr("192.168.56.1");
+ ULONG mask = inet_addr("255.255.255.0");
+ hr = VBoxNetCfgWinEnableStaticIpConfig(&guid, ip, mask);
+ if (FAILED(hr))
+ LogStringW(hModule, TEXT("CreateHostOnlyInterface: VBoxNetCfgWinEnableStaticIpConfig failed, error = 0x%x"), hr);
}
- }
- else
- {
- LogString(hModule, TEXT("CreateHostOnlyInterface: VBoxNetCfgWinCreateHostOnlyNetworkInterface failed, hr (0x%x)"), hr);
+ else
+ LogStringW(hModule, TEXT("CreateHostOnlyInterface: VBoxNetCfgWinCreateHostOnlyNetworkInterface failed, error = 0x%x"), hr);
}
- if(bPrevMode)
- {
- /* the prev mode != FALSE, i.e. non-interactive */
- SetupSetNonInteractiveMode(bPrevMode);
- }
+ if (SUCCEEDED(hr))
+ LogStringW(hModule, TEXT("Creating host-only interface done"));
- finiWinNetCfgLogger();
+ /* Restore original setup mode. */
+ if (bSetupModeInteractive)
+ SetupSetNonInteractiveMode(bSetupModeInteractive);
+
+ netCfgLoggerDisable();
- /* never fail the install even if we are not succeeded */
- return ERROR_SUCCESS;
-#else /* not defined VBOX_WITH_NETFLT */
- return ERROR_SUCCESS;
#endif /* VBOX_WITH_NETFLT */
+
+ /* Never fail the install even if we did not succeed. */
+ return ERROR_SUCCESS;
}
UINT __stdcall RemoveHostOnlyInterfaces(MSIHANDLE hModule)
{
#ifdef VBOX_WITH_NETFLT
- inintWinNetCfgLogger(hModule);
+ netCfgLoggerEnable(hModule);
- LogString(hModule, TEXT("Removing All Host-Only Interface"));
+ LogStringW(hModule, TEXT("RemoveHostOnlyInterfaces: Removing All Host-Only Interface"));
- BOOL bPrevMode = SetupSetNonInteractiveMode(FALSE);
+ BOOL bSetupModeInteractive = SetupSetNonInteractiveMode(FALSE);
HRESULT hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(NETADP_ID);
- if(hr == S_OK)
+ if (SUCCEEDED(hr))
{
- hr = VBoxNetCfgWinUninstallInfs(&GUID_DEVCLASS_NET, NETADP_ID, 0/* could be SUOI_FORCEDELETE */);
- if(hr != S_OK)
+ hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, NETADP_ID, L"Net", 0/* could be SUOI_FORCEDELETE */);
+ if (FAILED(hr))
{
- LogString(hModule, TEXT("NetAdp uninstalled successfully, but failed to remove infs\n"));
+ LogStringW(hModule, TEXT("RemoveHostOnlyInterfaces: NetAdp uninstalled successfully, but failed to remove infs\n"));
}
}
else
- {
- LogString(hModule, TEXT("NetAdp uninstall failed, hr = 0x%x\n"), hr);
- }
+ LogStringW(hModule, TEXT("RemoveHostOnlyInterfaces: NetAdp uninstall failed, hr = 0x%x\n"), hr);
- if(bPrevMode)
- {
- /* the prev mode != FALSE, i.e. non-interactive */
- SetupSetNonInteractiveMode(bPrevMode);
- }
+ /* Restore original setup mode. */
+ if (bSetupModeInteractive)
+ SetupSetNonInteractiveMode(bSetupModeInteractive);
- finiWinNetCfgLogger();
+ netCfgLoggerDisable();
+#endif /* VBOX_WITH_NETFLT */
+ /* Never fail the install even if we did not succeed. */
return ERROR_SUCCESS;
-#else /* not defined VBOX_WITH_NETFLT */
- return ERROR_SUCCESS;
-#endif /* VBOX_WITH_NETFLT */
}
-static bool IsTAPDevice (const TCHAR *a_pcGUID)
+static bool IsTAPDevice(const TCHAR *pcGUID)
{
HKEY hNetcard;
- LONG status;
- DWORD len;
- int i = 0;
- bool ret = false;
-
- status = RegOpenKeyEx (HKEY_LOCAL_MACHINE,
- TEXT("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}"),
- 0, KEY_READ, &hNetcard);
-
- if (status != ERROR_SUCCESS)
+ bool bIsTapDevice = false;
+ LONG lStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+ TEXT("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}"),
+ 0, KEY_READ, &hNetcard);
+ if (lStatus != ERROR_SUCCESS)
return false;
- while(true)
+ int i = 0;
+ while (true)
{
TCHAR szEnumName[256];
TCHAR szNetCfgInstanceId[256];
DWORD dwKeyType;
HKEY hNetCardGUID;
- len = sizeof(szEnumName);
- status = RegEnumKeyEx (hNetcard, i, szEnumName, &len, NULL, NULL, NULL, NULL);
- if (status != ERROR_SUCCESS)
+ DWORD dwLen = sizeof(szEnumName);
+ lStatus = RegEnumKeyEx(hNetcard, i, szEnumName, &dwLen, NULL, NULL, NULL, NULL);
+ if (lStatus != ERROR_SUCCESS)
break;
- status = RegOpenKeyEx (hNetcard, szEnumName, 0, KEY_READ, &hNetCardGUID);
- if (status == ERROR_SUCCESS)
+ lStatus = RegOpenKeyEx(hNetcard, szEnumName, 0, KEY_READ, &hNetCardGUID);
+ if (lStatus == ERROR_SUCCESS)
{
- len = sizeof (szNetCfgInstanceId);
- status = RegQueryValueEx (hNetCardGUID, TEXT("NetCfgInstanceId"), NULL, &dwKeyType, (LPBYTE)szNetCfgInstanceId, &len);
- if (status == ERROR_SUCCESS && dwKeyType == REG_SZ)
+ dwLen = sizeof(szNetCfgInstanceId);
+ lStatus = RegQueryValueEx(hNetCardGUID, TEXT("NetCfgInstanceId"), NULL, &dwKeyType, (LPBYTE)szNetCfgInstanceId, &dwLen);
+ if ( lStatus == ERROR_SUCCESS
+ && dwKeyType == REG_SZ)
{
TCHAR szNetProductName[256];
TCHAR szNetProviderName[256];
szNetProductName[0] = 0;
- len = sizeof(szNetProductName);
- status = RegQueryValueEx (hNetCardGUID, TEXT("ProductName"), NULL, &dwKeyType, (LPBYTE)szNetProductName, &len);
+ dwLen = sizeof(szNetProductName);
+ lStatus = RegQueryValueEx(hNetCardGUID, TEXT("ProductName"), NULL, &dwKeyType, (LPBYTE)szNetProductName, &dwLen);
szNetProviderName[0] = 0;
- len = sizeof(szNetProviderName);
- status = RegQueryValueEx (hNetCardGUID, TEXT("ProviderName"), NULL, &dwKeyType, (LPBYTE)szNetProviderName, &len);
+ dwLen = sizeof(szNetProviderName);
+ lStatus = RegQueryValueEx(hNetCardGUID, TEXT("ProviderName"), NULL, &dwKeyType, (LPBYTE)szNetProviderName, &dwLen);
- if ( !wcscmp(szNetCfgInstanceId, a_pcGUID)
+ if ( !wcscmp(szNetCfgInstanceId, pcGUID)
&& !wcscmp(szNetProductName, TEXT("VirtualBox TAP Adapter"))
&& ( (!wcscmp(szNetProviderName, TEXT("innotek GmbH"))) /* Legacy stuff. */
|| (!wcscmp(szNetProviderName, TEXT("Sun Microsystems, Inc."))) /* Legacy stuff. */
@@ -1025,7 +1005,7 @@ static bool IsTAPDevice (const TCHAR *a_pcGUID)
)
)
{
- ret = true;
+ bIsTapDevice = true;
RegCloseKey(hNetCardGUID);
break;
}
@@ -1036,7 +1016,7 @@ static bool IsTAPDevice (const TCHAR *a_pcGUID)
}
RegCloseKey (hNetcard);
- return ret;
+ return bIsTapDevice;
}
#define VBOX_TAP_HWID _T("vboxtap")
@@ -1044,11 +1024,11 @@ static bool IsTAPDevice (const TCHAR *a_pcGUID)
#define SetErrBreak(strAndArgs) \
if (1) { \
rc = 0; \
- LogString (a_hModule, strAndArgs); \
+ LogStringW(hModule, strAndArgs); \
break; \
} else do {} while (0)
-int removeNetworkInterface (MSIHANDLE a_hModule, const TCHAR* pcGUID)
+int removeNetworkInterface(MSIHANDLE hModule, const TCHAR* pcGUID)
{
int rc = 1;
do
@@ -1067,30 +1047,30 @@ int removeNetworkInterface (MSIHANDLE a_hModule, const TCHAR* pcGUID)
TEXT("SYSTEM\\CurrentControlSet\\Control\\Network\\")
TEXT("{4D36E972-E325-11CE-BFC1-08002BE10318}\\%s"),
pcGUID);
- LONG status;
- status = RegOpenKeyEx (HKEY_LOCAL_MACHINE, strRegLocation, 0,
+ LONG lStatus;
+ lStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, strRegLocation, 0,
KEY_READ, &hkeyNetwork);
- if ((status != ERROR_SUCCESS) || !hkeyNetwork)
- SetErrBreak ((TEXT("VBox HostInterfaces: Host interface network was not found in registry (%s)! [1]"), strRegLocation));
+ if ((lStatus != ERROR_SUCCESS) || !hkeyNetwork)
+ SetErrBreak((TEXT("VBox HostInterfaces: Host interface network was not found in registry (%s)! [1]"), strRegLocation));
- status = RegOpenKeyExA (hkeyNetwork, "Connection", 0,
+ lStatus = RegOpenKeyExA(hkeyNetwork, "Connection", 0,
KEY_READ, &hkeyConnection);
- if ((status != ERROR_SUCCESS) || !hkeyConnection)
- SetErrBreak ((TEXT("VBox HostInterfaces: Host interface network was not found in registry (%s)! [2]"), strRegLocation));
+ if ((lStatus != ERROR_SUCCESS) || !hkeyConnection)
+ SetErrBreak((TEXT("VBox HostInterfaces: Host interface network was not found in registry (%s)! [2]"), strRegLocation));
DWORD len = sizeof (lszPnPInstanceId);
DWORD dwKeyType;
- status = RegQueryValueExW (hkeyConnection, L"PnPInstanceID", NULL,
+ lStatus = RegQueryValueExW(hkeyConnection, L"PnPInstanceID", NULL,
&dwKeyType, (LPBYTE) lszPnPInstanceId, &len);
- if ((status != ERROR_SUCCESS) || (dwKeyType != REG_SZ))
- SetErrBreak ((TEXT("VBox HostInterfaces: Host interface network was not found in registry (%s)! [3]"), strRegLocation));
+ if ((lStatus != ERROR_SUCCESS) || (dwKeyType != REG_SZ))
+ SetErrBreak((TEXT("VBox HostInterfaces: Host interface network was not found in registry (%s)! [3]"), strRegLocation));
}
while (0);
if (hkeyConnection)
- RegCloseKey (hkeyConnection);
+ RegCloseKey(hkeyConnection);
if (hkeyNetwork)
- RegCloseKey (hkeyNetwork);
+ RegCloseKey(hkeyNetwork);
/*
* Now we are going to enumerate all network devices and
@@ -1098,40 +1078,39 @@ int removeNetworkInterface (MSIHANDLE a_hModule, const TCHAR* pcGUID)
*/
HDEVINFO hDeviceInfo = INVALID_HANDLE_VALUE;
+ BOOL fResult;
do
{
- BOOL ok;
DWORD ret = 0;
GUID netGuid;
SP_DEVINFO_DATA DeviceInfoData;
DWORD index = 0;
- BOOL found = FALSE;
DWORD size = 0;
/* initialize the structure size */
- DeviceInfoData.cbSize = sizeof (SP_DEVINFO_DATA);
+ DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
/* copy the net class GUID */
- memcpy (&netGuid, &GUID_DEVCLASS_NET, sizeof (GUID_DEVCLASS_NET));
+ memcpy(&netGuid, &GUID_DEVCLASS_NET, sizeof (GUID_DEVCLASS_NET));
/* return a device info set contains all installed devices of the Net class */
- hDeviceInfo = SetupDiGetClassDevs (&netGuid, NULL, NULL, DIGCF_PRESENT);
-
+ hDeviceInfo = SetupDiGetClassDevs(&netGuid, NULL, NULL, DIGCF_PRESENT);
if (hDeviceInfo == INVALID_HANDLE_VALUE)
{
- LogString (a_hModule, TEXT("VBox HostInterfaces: SetupDiGetClassDevs failed (0x%08X)!"), GetLastError());
- SetErrBreak (TEXT("VBox HostInterfaces: Uninstallation failed!"));
+ LogStringW(hModule, TEXT("VBox HostInterfaces: SetupDiGetClassDevs failed (0x%08X)!"), GetLastError());
+ SetErrBreak(TEXT("VBox HostInterfaces: Uninstallation failed!"));
}
+ BOOL fFoundDevice = FALSE;
+
/* enumerate the driver info list */
while (TRUE)
{
- TCHAR *deviceHwid;
+ TCHAR *pszDeviceHwid;
- ok = SetupDiEnumDeviceInfo (hDeviceInfo, index, &DeviceInfoData);
-
- if (!ok)
+ fResult = SetupDiEnumDeviceInfo(hDeviceInfo, index, &DeviceInfoData);
+ if (!fResult)
{
if (GetLastError() == ERROR_NO_MORE_ITEMS)
break;
@@ -1143,14 +1122,14 @@ int removeNetworkInterface (MSIHANDLE a_hModule, const TCHAR* pcGUID)
}
/* try to get the hardware ID registry property */
- ok = SetupDiGetDeviceRegistryProperty (hDeviceInfo,
- &DeviceInfoData,
- SPDRP_HARDWAREID,
- NULL,
- NULL,
- 0,
- &size);
- if (!ok)
+ fResult = SetupDiGetDeviceRegistryProperty(hDeviceInfo,
+ &DeviceInfoData,
+ SPDRP_HARDWAREID,
+ NULL,
+ NULL,
+ 0,
+ &size);
+ if (!fResult)
{
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
{
@@ -1158,20 +1137,23 @@ int removeNetworkInterface (MSIHANDLE a_hModule, const TCHAR* pcGUID)
continue;
}
- deviceHwid = (TCHAR *) malloc (size);
- ok = SetupDiGetDeviceRegistryProperty (hDeviceInfo,
- &DeviceInfoData,
- SPDRP_HARDWAREID,
- NULL,
- (PBYTE)deviceHwid,
- size,
- NULL);
- if (!ok)
+ pszDeviceHwid = (TCHAR *)malloc(size);
+ if (pszDeviceHwid)
{
- free (deviceHwid);
- deviceHwid = NULL;
- index++;
- continue;
+ fResult = SetupDiGetDeviceRegistryProperty(hDeviceInfo,
+ &DeviceInfoData,
+ SPDRP_HARDWAREID,
+ NULL,
+ (PBYTE)pszDeviceHwid,
+ size,
+ NULL);
+ if (!fResult)
+ {
+ free(pszDeviceHwid);
+ pszDeviceHwid = NULL;
+ index++;
+ continue;
+ }
}
}
else
@@ -1181,11 +1163,11 @@ int removeNetworkInterface (MSIHANDLE a_hModule, const TCHAR* pcGUID)
continue;
}
- for (TCHAR *t = deviceHwid;
- t && *t && t < &deviceHwid[size / sizeof(TCHAR)];
+ for (TCHAR *t = pszDeviceHwid;
+ t && *t && t < &pszDeviceHwid[size / sizeof(TCHAR)];
t += _tcslen (t) + 1)
{
- if (!_tcsicmp (VBOX_TAP_HWID, t))
+ if (!_tcsicmp(VBOX_TAP_HWID, t))
{
/* get the device instance ID */
TCHAR devID [MAX_DEVICE_ID_LEN];
@@ -1193,83 +1175,82 @@ int removeNetworkInterface (MSIHANDLE a_hModule, const TCHAR* pcGUID)
devID, MAX_DEVICE_ID_LEN, 0) == CR_SUCCESS)
{
/* compare to what we determined before */
- if (wcscmp(devID, lszPnPInstanceId) == 0)
+ if (!wcscmp(devID, lszPnPInstanceId))
{
- found = TRUE;
+ fFoundDevice = TRUE;
break;
}
}
}
}
- if (deviceHwid)
+ if (pszDeviceHwid)
{
- free (deviceHwid);
- deviceHwid = NULL;
+ free(pszDeviceHwid);
+ pszDeviceHwid = NULL;
}
- if (found)
+ if (fFoundDevice)
break;
index++;
}
- if (found == FALSE)
- SetErrBreak (TEXT("VBox HostInterfaces: Host Interface Network driver not found!"));
-
- ok = SetupDiSetSelectedDevice (hDeviceInfo, &DeviceInfoData);
- if (!ok)
+ if (fFoundDevice)
{
- LogString (a_hModule, TEXT("VBox HostInterfaces: SetupDiSetSelectedDevice failed (0x%08X)!"), GetLastError());
- SetErrBreak (TEXT("VBox HostInterfaces: Uninstallation failed!"));
- }
+ fResult = SetupDiSetSelectedDevice(hDeviceInfo, &DeviceInfoData);
+ if (!fResult)
+ {
+ LogStringW(hModule, TEXT("VBox HostInterfaces: SetupDiSetSelectedDevice failed (0x%08X)!"), GetLastError());
+ SetErrBreak(TEXT("VBox HostInterfaces: Uninstallation failed!"));
+ }
- ok = SetupDiCallClassInstaller (DIF_REMOVE, hDeviceInfo, &DeviceInfoData);
- if (!ok)
- {
- LogString (a_hModule, TEXT("VBox HostInterfaces: SetupDiCallClassInstaller (DIF_REMOVE) failed (0x%08X)!"), GetLastError());
- SetErrBreak (TEXT("VBox HostInterfaces: Uninstallation failed!"));
+ fResult = SetupDiCallClassInstaller(DIF_REMOVE, hDeviceInfo, &DeviceInfoData);
+ if (!fResult)
+ {
+ LogStringW(hModule, TEXT("VBox HostInterfaces: SetupDiCallClassInstaller (DIF_REMOVE) failed (0x%08X)!"), GetLastError());
+ SetErrBreak(TEXT("VBox HostInterfaces: Uninstallation failed!"));
+ }
}
+ else
+ SetErrBreak(TEXT("VBox HostInterfaces: Host interface network device not found!"));
}
while (0);
/* clean up the device info set */
if (hDeviceInfo != INVALID_HANDLE_VALUE)
- SetupDiDestroyDeviceInfoList (hDeviceInfo);
+ SetupDiDestroyDeviceInfoList(hDeviceInfo);
}
while (0);
return rc;
}
-UINT __stdcall UninstallTAPInstances (MSIHANDLE a_hModule)
+UINT __stdcall UninstallTAPInstances(MSIHANDLE hModule)
{
static const TCHAR *NetworkKey = TEXT("SYSTEM\\CurrentControlSet\\Control\\Network\\")
TEXT("{4D36E972-E325-11CE-BFC1-08002BE10318}");
HKEY hCtrlNet;
- LONG status = 0;
- DWORD len = 0;
- LONG cnt = 0;
- status = RegOpenKeyEx (HKEY_LOCAL_MACHINE, NetworkKey, 0, KEY_READ, &hCtrlNet);
- if (status == ERROR_SUCCESS)
+ LONG lStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, NetworkKey, 0, KEY_READ, &hCtrlNet);
+ if (lStatus == ERROR_SUCCESS)
{
- LogString(a_hModule, TEXT("VBox HostInterfaces: Enumerating interfaces ..."));
+ LogStringW(hModule, TEXT("VBox HostInterfaces: Enumerating interfaces ..."));
for (int i = 0;; ++ i)
{
TCHAR szNetworkGUID [256] = { 0 };
TCHAR szNetworkConnection [256] = { 0 };
- len = sizeof (szNetworkGUID);
- status = RegEnumKeyEx (hCtrlNet, i, szNetworkGUID, &len, NULL, NULL, NULL, NULL);
- if (status != ERROR_SUCCESS)
+ DWORD dwLen = (DWORD)sizeof(szNetworkGUID);
+ lStatus = RegEnumKeyEx(hCtrlNet, i, szNetworkGUID, &dwLen, NULL, NULL, NULL, NULL);
+ if (lStatus != ERROR_SUCCESS)
{
- switch (status)
+ switch (lStatus)
{
case ERROR_NO_MORE_ITEMS:
- LogString(a_hModule, TEXT("VBox HostInterfaces: No interfaces found."));
+ LogStringW(hModule, TEXT("VBox HostInterfaces: No interfaces found."));
break;
default:
- LogString(a_hModule, TEXT("VBox HostInterfaces: Enumeration failed: %ld"), status);
+ LogStringW(hModule, TEXT("VBox HostInterfaces: Enumeration failed: %ld"), lStatus);
break;
};
break;
@@ -1277,13 +1258,13 @@ UINT __stdcall UninstallTAPInstances (MSIHANDLE a_hModule)
if (IsTAPDevice(szNetworkGUID))
{
- LogString(a_hModule, TEXT("VBox HostInterfaces: Removing interface \"%s\" ..."), szNetworkGUID);
- removeNetworkInterface (a_hModule, szNetworkGUID);
- status = RegDeleteKey (hCtrlNet, szNetworkGUID);
+ LogStringW(hModule, TEXT("VBox HostInterfaces: Removing interface \"%s\" ..."), szNetworkGUID);
+ removeNetworkInterface (hModule, szNetworkGUID);
+ lStatus = RegDeleteKey (hCtrlNet, szNetworkGUID);
}
}
RegCloseKey (hCtrlNet);
- LogString(a_hModule, TEXT("VBox HostInterfaces: Removing interfaces done."));
+ LogStringW(hModule, TEXT("VBox HostInterfaces: Removing interfaces done."));
}
return ERROR_SUCCESS;
}
diff --git a/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def b/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def
index cfe118b94..27f50954e 100644
--- a/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def
+++ b/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def
@@ -1,4 +1,4 @@
-; $Id: VBoxInstallHelper.def $
+; $Id: VBoxInstallHelper.def 32112 2010-08-31 08:44:09Z vboxsync $
;; @file
; VBoxInstallHelper - Defines the exports the MSI engine uses.
;
diff --git a/src/VBox/Installer/win/Languages/de_DE.wxl b/src/VBox/Installer/win/Languages/de_DE.wxl
index 24b6e8c1a..f8cb24bdd 100644
--- a/src/VBox/Installer/win/Languages/de_DE.wxl
+++ b/src/VBox/Installer/win/Languages/de_DE.wxl
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="utf-8"?>
-<WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage='1252'>
+<?xml version="1.0" encoding="utf-8"?>
+<WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage="1252" Culture="de_DE">
<!--
Language Definition Include for VirtualBox WiX script.
- Copyright (C) 2010 Oracle Corporation
+ Copyright (C) 2011 Oracle Corporation
All rights reserved.
-->
diff --git a/src/VBox/Installer/win/Languages/en_US.wxl b/src/VBox/Installer/win/Languages/en_US.wxl
index 26fa3c773..82da635a5 100644
--- a/src/VBox/Installer/win/Languages/en_US.wxl
+++ b/src/VBox/Installer/win/Languages/en_US.wxl
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
-<WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage='1252'>
+<WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage="1252" Culture="en_US">
<!--
Language Definition Include for VirtualBox WiX script.
- Copyright (C) 2010 Oracle Corporation
+ Copyright (C) 2011 Oracle Corporation
All rights reserved.
-->
diff --git a/src/VBox/Installer/win/Languages/fr_FR.wxl b/src/VBox/Installer/win/Languages/fr_FR.wxl
index 1615ab65a..58b3ac6a4 100644
--- a/src/VBox/Installer/win/Languages/fr_FR.wxl
+++ b/src/VBox/Installer/win/Languages/fr_FR.wxl
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage='1252'>
+<WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage="1252" Culture="fr_FR">
<!--
Language Definition Include for VirtualBox WiX script.
diff --git a/src/VBox/Installer/win/Makefile.kmk b/src/VBox/Installer/win/Makefile.kmk
index df7ff83b1..aa76e3caa 100644
--- a/src/VBox/Installer/win/Makefile.kmk
+++ b/src/VBox/Installer/win/Makefile.kmk
@@ -1,4 +1,4 @@
-# $Id: Makefile.kmk $
+# $Id: Makefile.kmk 37622 2011-06-24 07:11:33Z vboxsync $
## @file
# Makefile for the Windows installer.
#
@@ -106,7 +106,8 @@ OTHER_CLEAN += \
$(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixobj \
$(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).msi) \
$(VBOX_WIN_INST_OUT_DIR)/Files_Doc.wxi \
- $(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi
+ $(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi \
+ $(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi
ifdef VBOX_WITH_COMBINED_PACKAGE
ifeq ($(KBUILD_TARGET_ARCH),x86)
@@ -145,6 +146,13 @@ ifdef VBOX_WITH_BUNDLED_INSTALLER
PACKING.win += $(VBOX_PATH_PACK_BUNDLE_ZIP)
endif
+#
+# Surpress/skip the following ICE (internal consistency evaluators):
+# - ICE64: Checks that new directories in the user profile are removed correctly in roaming scenarios.
+# -> We don't want to remove system folders (like "Microsoft/Internet Explorer/Quick Launch").
+#
+VBOX_MSI_ICE_IGNORE := \
+ -ice:64
#
# Create intermediate XML file for languages (needed for .MSI linking).
@@ -181,7 +189,7 @@ define def_vbox_license_xml
$(VBOX_WIN_INST_OUT_DIR)/Languages/License_$(lang).wxl: $(license_file) $(MAKEFILE_CURRENT) | $$$$(dir $$$$@)
$$(call MSG_GENERATE,,$$@,$$<)
$(APPEND) -t $$@ '<?xml version="1.0" encoding="utf-8"?>'
- $(APPEND) $$@ '<WixLocalization xmlns="http://schemas.microsoft.com/wix/2003/11/localization" Codepage="1252">'
+ $(APPEND) $$@ '<WixLocalization xmlns="http://schemas.microsoft.com/wix/2006/localization" Codepage="1252" Culture="$(lang)">'
$(REDIRECT) -a+to $$@ -- $(ECHO_EXT) -n '<String Id=\"LicenseText\">'
$(REDIRECT) -a+to $$@ -- $(SED) -e "s|<|\&lt;|g" -e "s|>|\&gt;|g" $(license_file)
@@ -209,40 +217,64 @@ $(foreach lang,$(VBOX_INSTALLER_LANGUAGES), \
$(VBOX_WIN_INST_OUT_DIR)/Files_Main.wxi: $(MAKEFILE_CURRENT) | $$(dir $$@)
$(call MSG_GENERATE,,$@,$<)
$(APPEND) -t $@ '<?xml version="1.0" ?>'
- $(APPEND) $@ '<Include>'
+ $(APPEND) $@ '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
ifdef VBOX_WITH_DOCS_CHM
- $(APPEND) $@ ' <File Id="VirtualBox.chm" Name="VBox.chm" LongName="VirtualBox.chm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/VirtualBox.chm"></File>'
+ $(APPEND) $@ ' <File Id="file_VirtualBox.chm" Name="VirtualBox.chm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/VirtualBox.chm"></File>'
$(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
- ' <File Id="VirtualBox_$(lang).chm" Name="VB_$(lang).chm" LongName="VirtualBox_$(lang).chm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/VirtualBox_$(lang).chm"></File>')
+ ' <File Id="file_VirtualBox_$(lang).chm" Name="VirtualBox_$(lang).chm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/VirtualBox_$(lang).chm"></File>')
endif
$(APPEND) $@ '</Include>'
$(VBOX_WIN_INST_OUT_DIR)/Files_Doc.wxi: $(MAKEFILE_CURRENT) | $$(dir $$@)
$(call MSG_GENERATE,,$@,$<)
$(APPEND) -t $@ '<?xml version="1.0" ?>'
- $(APPEND) $@ '<Include>'
- $(APPEND) $@ ' <File Id="UserManual.pdf" Name="Manual.pdf" LongName="UserManual.pdf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/UserManual.pdf">'
- $(APPEND) $@ ' <Shortcut Id="startmenuManPDF_en_US" Directory="ProgramMenuDir" Name="M_en_US" LongName="$$(loc.StartMenu_UserManual) (English)" WorkingDirectory="INSTALLDIR"/>'
+ $(APPEND) $@ '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
+ $(APPEND) $@ ' <File Id="file_UserManual.pdf" Name="UserManual.pdf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/UserManual.pdf">'
$(APPEND) $@ ' </File>'
$(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
- ' <File Id="UserManual_$(lang).pdf" Name="Mn_$(lang).pdf" LongName="UserManual_$(lang).pdf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/UserManual_$(lang).pdf">' \
- ' <Shortcut Id="startmenuManPDF_$(lang)" Directory="ProgramMenuDir" Name="M_$(lang)" LongName="$$(loc.StartMenu_UserManual) ($(VBOX_BRAND_$(lang)_LANG_NAME))" WorkingDirectory="INSTALLDIR"/>' \
+ ' <File Id="file_UserManual_$(lang).pdf" Name="UserManual_$(lang).pdf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(PATH_BIN)/UserManual_$(lang).pdf">' \
' </File>')
$(APPEND) $@ '</Include>'
$(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi: $(MAKEFILE_CURRENT) | $$(dir $$@)
$(call MSG_GENERATE,,$@,$<)
$(APPEND) -t $@ '<?xml version="1.0" ?>'
- $(APPEND) $@ '<Include>'
- $(APPEND) $@ ' <File Id="License_en_US.rtf" Name="Li_en_US.rtf" LongName="License_en_US.rtf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(VBOX_BRAND_LICENSE_RTF)">'
- $(APPEND) $@ ' <Shortcut Id="startmenuLicRTF_en_US" Directory="ProgramMenuDir" Name="L_en_US" LongName="$$(loc.StartMenu_License) (English)" WorkingDirectory="INSTALLDIR"/>'
- $(APPEND) $@ ' </File>'
+ $(APPEND) $@ '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
+ $(APPEND) $@ ' <File Id="file_License_en_US.rtf" Name="License_en_US.rtf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(VBOX_BRAND_LICENSE_RTF)">' \
+ ' </File>'
$(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
- ' <File Id="License_$(lang).rtf" Name="Li_$(lang).rtf" LongName="License_$(lang).rtf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(VBOX_BRAND_$(lang)_LICENSE_RTF)">' \
- ' <Shortcut Id="startmenuLicRTF_$(lang)" Directory="ProgramMenuDir" Name="L_$(lang)" LongName="$$(loc.StartMenu_License) ($(VBOX_BRAND_$(lang)_LANG_NAME))" WorkingDirectory="INSTALLDIR"/>' \
+ ' <File Id="file_License_$(lang).rtf" Name="License_$(lang).rtf" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$(VBOX_BRAND_$(lang)_LICENSE_RTF)"/>' \
' </File>')
$(APPEND) $@ '</Include>'
+$(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi: $(MAKEFILE_CURRENT) | $$(dir $$@)
+ $(call MSG_GENERATE,,$@,$<)
+ $(APPEND) -t $@ '<?xml version="1.0" ?>'
+ $(APPEND) $@ '<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">'
+ #
+ # Documentation (PDF/CHM)
+ #
+ ifdef VBOX_WITH_DOCS_CHM
+ $(APPEND) $@ ' <Shortcut Id="sc_StartMenu_ManualCHM_en_US" Directory="dir_StartMenuVBox" Name="!(loc.StartMenu_UserManual) (CHM, English)" Description="!(loc.StartMenu_UserManual)"' \
+ ' Target="[INSTALLDIR]\doc\VirtualBox.chm" WorkingDirectory="dir_Documents" Advertise="no"/>'
+ $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
+ ' <Shortcut Id="sc_StartMenu_ManualCHM_$(lang)" Directory="dir_StartMenuVBox" Name="$!(loc.StartMenu_UserManual) (CHM, $(VBOX_BRAND_$(lang)_LANG_NAME))"' \
+ ' Description="$!(loc.StartMenu_UserManual) ($(VBOX_BRAND_$(lang)_LANG_NAME))" Target="[INSTALLDIR]\doc\VirtualBox_$(lang).chm" WorkingDirectory="dir_Documents"/>')
+ endif
+ $(APPEND) $@ ' <Shortcut Id="sc_StartMenu_ManualPDF_en_US" Directory="dir_StartMenuVBox" Name="!(loc.StartMenu_UserManual) (PDF, English)" Description="!(loc.StartMenu_UserManual)"' \
+ ' Target="[INSTALLDIR]\doc\UserManual.pdf" WorkingDirectory="dir_Documents" Advertise="no"/>'
+ $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
+ ' <Shortcut Id="sc_StartMenu_ManualPDF_$(lang)" Directory="dir_StartMenuVBox" Name="$!(loc.StartMenu_UserManual) (PDF, $(VBOX_BRAND_$(lang)_LANG_NAME))"' \
+ ' Description="$!(loc.StartMenu_UserManual) ($(VBOX_BRAND_$(lang)_LANG_NAME))" Target="[INSTALLDIR]\doc\UserManual_$(lang).pdf" WorkingDirectory="dir_Documents"/>')
+ #
+ # License(s) (RTF)
+ #
+ $(APPEND) $@ ' <Shortcut Id="sc_StartMenu_License_en_US" Directory="dir_StartMenuVBox" Name="!(loc.StartMenu_License) (English)" Description="!(loc.StartMenu_License)"' \
+ ' Target="[INSTALLDIR]License_en_US.rtf" WorkingDirectory="INSTALLDIR" Advertise="no"/>'
+ $(APPEND) -n $@ $(foreach lang,$(VBOX_MANUAL_ADD_LANGUAGES), \
+ ' <Shortcut Id="sc_StartMenu_License_$(lang)" Directory="dir_StartMenuVBox" Name="$!(loc.StartMenu_License) ($(VBOX_BRAND_$(lang)_LANG_NAME))"' \
+ ' Description="$!(loc.StartMenu_License) ($(VBOX_BRAND_$(lang)_LANG_NAME))" Target="License_$(lang).rtf" WorkingDirectory="INSTALLDIR"/>')
+ $(APPEND) $@ '</Include>'
#
# .MSI link (all languages).
@@ -263,10 +295,14 @@ $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).msi: \
$(VBOX_PATH_WIX)/light.exe -nologo \
-loc $(VBOX_WIN_INST_OUT_DIR)/Languages/Language_$(lang).wxl \
-loc $(VBOX_WIN_INST_OUT_DIR)/Languages/License_$(lang).wxl \
+ -ext $(VBOX_PATH_WIX)/WixUIExtension.dll \
+ -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll \
+ $(VBOX_MSI_ICE_IGNORE) \
-out $$@ \
$$< \
- $(VBOX_PATH_WIX)/wixca.wixlib \
- $(VBOX_PATH_DIFX)/DIFxApp.wixlib
+ $(if-expr "$(KBUILD_TARGET_ARCH)" == "x86", \
+ $(VBOX_PATH_WIX)/difxapp_x86.wixlib, \
+ $(VBOX_PATH_WIX)/difxapp_x64.wixlib)
$(RM) -f $(VBOX_WIN_INST_OUT_DIR)/Languages/$(lang).mst
$(call VBOX_SIGN_FILE_FN,$$@)
endef
@@ -280,7 +316,6 @@ $(foreach lang,$(VBOX_INSTALLER_LANGUAGES), $(eval $(def_vbox_link_msi)))
-include $(VBOX_WIN_INST_OUT_DIR)/VirtualBox.wixobj.dep
# Filter out some files depending on build type and compiler.
-VBOX_MSI_DEPENDENCIES := $(filter-out wixca.dll, $(VBOX_MSI_DEPENDENCIES))
ifeq ($(KBUILD_TYPE),release)
VBOX_MSI_DEPENDENCIES := $(filer-out $(PATH_OUT)/bin/VBoxDbg3.dll, $(VBOX_MSI_DEPENDENCIES))
endif
@@ -302,6 +337,39 @@ else
$(PATH_OUT)/bin/Microsoft.VC80.CRT/msvcm80.dll \
, $(VBOX_MSI_DEPENDENCIES))
endif
+# TODO: Add filtering out more dependencies here!
+ifndef VBOX_WITH_QTGUI
+ $(PATH_OUT)/bin/VirtualBox.exe \
+ $(PATH_OUT)/bin/VBoxTestOGL.exe \
+ $(PATH_OUT)/bin/QtCoreVBox4.dll \
+ $(PATH_OUT)/bin/QtGuiVBox4.dll \
+ $(PATH_OUT)/bin/QtNetworkVBox4.dll \
+ $(PATH_OUT)/bin/QtOpenGLVBox4.dll \
+ $(PATH_OUT)/bin/accessible/qtaccessiblewidgets4.dll \
+ , $(VBOX_MSI_DEPENDENCIES))
+endif
+ifndef VBOX_WITH_PYTHON
+ VBOX_MSI_DEPENDENCIES := $(filer-out $ \
+ $(PATH_OUT)/bin/sdk/installer/vboxapisetup.py \
+ $(PATH_OUT)/bin/sdk/installer/vboxapi/__init__.py \
+ $(PATH_OUT)/bin/sdk/installer/vboxapi/VirtualBox_constants.py \
+ , $(VBOX_MSI_DEPENDENCIES))
+endif
+ifndef VBOX_WITH_CROGL
+ VBOX_MSI_DEPENDENCIES := $(filer-out $ \
+ $(PATH_OUT)/bin/VBoxOGLhostcrutil.dll \
+ $(PATH_OUT)/bin/VBoxOGLhosterrorspu.dll \
+ $(PATH_OUT)/bin/VBoxOGLrenderspu.dll \
+ $(PATH_OUT)/bin/VBoxSharedCrOpenGL.dll \
+ , $(VBOX_MSI_DEPENDENCIES))
+endif
+ifndef VBOX_WITH_SECURELABEL
+ VBOX_MSI_DEPENDENCIES := $(filer-out $(PATH_OUT)/bin/SDL_ttf.dll, $(VBOX_MSI_DEPENDENCIES))
+endif
+ifndef VBOX_WITH_WEBSERVICES
+ VBOX_MSI_DEPENDENCIES := $(filer-out $(PATH_OUT)/bin/vboxwebsrv.exe, $(VBOX_MSI_DEPENDENCIES))
+endif
+
ifneq ($(KBUILD_TARGET_ARCH),amd64)
VBOX_MSI_DEPENDENCIES := $(filter-out \
$(PATH_OUT)/bin/VBoxREM2.rel \
@@ -383,7 +451,10 @@ $(VBOX_WIN_INST_OUT_DIR)/VirtualBox_$(lang).wixobj: \
-E 'BUILD_TARGET_ARCH=$(KBUILD_TARGET_ARCH)' \
-E 'VBOX_USE_VCC80=$(if $(VBOX_USE_VCC80),yes,no)' \
-- \
- $(VBOX_PATH_WIX)/candle.exe $(filter-out $(VBOX_VERSION_STAMP),$$<) -out $$@
+ $(VBOX_PATH_WIX)/candle.exe $(filter-out $(VBOX_VERSION_STAMP),$$<) \
+ -ext $(VBOX_PATH_WIX)/WixUIExtension.dll \
+ -ext $(VBOX_PATH_WIX)/WixDifxAppExtension.dll \
+ -out $$@
ifeq ($(lang),en_US)
#
# Generate dependency file, we share this between all the languages.
@@ -419,8 +490,8 @@ $(VBOX_WIN_INST_OUT_DIR)/VBoxGuiNLS.wxi: $(PATH_ROOT)/src/VBox/Frontends/Virtual
$(APPEND) -t $@ '<?xml version="1.0" ?>'
$(APPEND) $@ '<Include>'
$(APPEND) -n $@ $(foreach lang,$(VBOX_APPROVED_GUI_LANGUAGES), \
- ' <File Id="nlsqt${lang}" Name="qt_${lang}.qm" LongName="qt_${lang}.qm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" src="$$(env.PATH_OUT)\bin\nls\qt_${lang}.qm" />' \
- ' <File Id="nlsgui${lang}" Name="vb_${lang}.qm" LongName="VirtualBox_${lang}.qm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" src="$$(env.PATH_OUT)\bin\nls\VirtualBox_${lang}.qm" />')
+ ' <File Id="nlsqt${lang}" Name="qt_${lang}.qm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$$(env.PATH_OUT)\bin\nls\qt_${lang}.qm" />' \
+ ' <File Id="nlsgui${lang}" Name="VirtualBox_${lang}.qm" DiskId="$(VBOX_INSTALLER_COMMON_DISKID)" Vital="yes" Source="$$(env.PATH_OUT)\bin\nls\VirtualBox_${lang}.qm" />')
$(APPEND) $@ '</Include>'
#
@@ -475,6 +546,7 @@ $(PACKAGE_NAME_FINAL): \
$(VBOX_WIN_INST_OUT_DIR)/Files_Main.wxi \
$(VBOX_WIN_INST_OUT_DIR)/Files_Doc.wxi \
$(VBOX_WIN_INST_OUT_DIR)/Files_License.wxi \
+ $(VBOX_WIN_INST_OUT_DIR)/Shortcuts_StartMenu.wxi \
$(foreach lang,$(VBOX_INSTALLER_LANGUAGES), $(VBOX_WIN_INST_OUT_DIR)/$(PACKAGE_NAME_LANG)_$(lang).msi) \
$(foreach lang,$(VBOX_INSTALLER_ADD_LANGUAGES), $(VBOX_WIN_INST_OUT_DIR)/Languages/$(lang).mst) \
| $$(dir $$@)
diff --git a/src/VBox/Installer/win/Resources/Makefile.kmk b/src/VBox/Installer/win/Resources/Makefile.kmk
index 44d470a75..f3143551d 100644
--- a/src/VBox/Installer/win/Resources/Makefile.kmk
+++ b/src/VBox/Installer/win/Resources/Makefile.kmk
@@ -1,4 +1,4 @@
-# $Id: Makefile.kmk $
+# $Id: Makefile.kmk 37549 2011-06-20 08:44:19Z vboxsync $
## @file
# Sub-Makefile for VBoxRes.dll.
#
@@ -42,11 +42,19 @@ ifdef VBOX_OSE
VBOX_WINDOWS_ICON_EXT_EXTPACK := $(VBOX_RESOURCES_PATH_WIN)/OSE/virtualbox-vbox-extpack.ico
VBOX_WINDOWS_ICON_EXT_OVA := $(VBOX_RESOURCES_PATH_WIN)/OSE/virtualbox-ova.ico
VBOX_WINDOWS_ICON_EXT_OVF := $(VBOX_RESOURCES_PATH_WIN)/OSE/virtualbox-ovf.ico
+ VBOX_WINDOWS_ICON_EXT_VDI := $(VBOX_RESOURCES_PATH_WIN)/virtualbox-vdi.ico
+ VBOX_WINDOWS_ICON_EXT_VMDK := $(VBOX_RESOURCES_PATH_WIN)/virtualbox-vmdk.ico
+ VBOX_WINDOWS_ICON_EXT_VHD := $(VBOX_RESOURCES_PATH_WIN)/virtualbox-vhd.ico
+ VBOX_WINDOWS_ICON_EXT_HDD := $(VBOX_RESOURCES_PATH_WIN)/virtualbox-hdd.ico
else
VBOX_WINDOWS_ICON_EXT_VBOX := $(VBOX_RESOURCES_PATH_WIN)/virtualbox-vbox.ico
VBOX_WINDOWS_ICON_EXT_EXTPACK := $(VBOX_RESOURCES_PATH_WIN)/virtualbox-vbox-extpack.ico
VBOX_WINDOWS_ICON_EXT_OVA := $(VBOX_RESOURCES_PATH_WIN)/virtualbox-ova.ico
VBOX_WINDOWS_ICON_EXT_OVF := $(VBOX_RESOURCES_PATH_WIN)/virtualbox-ovf.ico
+ VBOX_WINDOWS_ICON_EXT_VDI := $(VBOX_RESOURCES_PATH_WIN)/virtualbox-vdi.ico
+ VBOX_WINDOWS_ICON_EXT_VMDK := $(VBOX_RESOURCES_PATH_WIN)/virtualbox-vmdk.ico
+ VBOX_WINDOWS_ICON_EXT_VHD := $(VBOX_RESOURCES_PATH_WIN)/virtualbox-vhd.ico
+ VBOX_WINDOWS_ICON_EXT_HDD := $(VBOX_RESOURCES_PATH_WIN)/virtualbox-hdd.ico
endif
VBOX_RESOURCES_WIN := \
@@ -54,7 +62,10 @@ VBOX_RESOURCES_WIN := \
$(VBOX_WINDOWS_ICON_EXT_VBOX) \
$(VBOX_WINDOWS_ICON_EXT_EXTPACK) \
$(VBOX_WINDOWS_ICON_EXT_OVA) \
- $(VBOX_WINDOWS_ICON_EXT_OVF)
+ $(VBOX_WINDOWS_ICON_EXT_OVF) \
+ $(VBOX_WINDOWS_ICON_EXT_VMDK) \
+ $(VBOX_WINDOWS_ICON_EXT_VHD) \
+ $(VBOX_WINDOWS_ICON_EXT_HDD)
$$(VBoxRes_0_OUTDIR)/VBoxRes-icons.rc: \
$$(VBOX_RESOURCES_WIN) $(MAKEFILE_CURRENT) | $$(dir $$@)
@@ -62,7 +73,10 @@ $$(VBoxRes_0_OUTDIR)/VBoxRes-icons.rc: \
$(APPEND) $@ 'IDI_VIRTUALBOX ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_FILE))"'
$(APPEND) $@ 'IDI_FILETYPE_VBOX ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_EXT_VBOX))"'
$(APPEND) $@ 'IDI_FILETYPE_VBOX_EXTPACK ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_EXT_EXTPACK))"'
- $(APPEND) $@ 'IDI_FILETYPE_VBOX_OVA ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_EXT_OVA))"'
- $(APPEND) $@ 'IDI_FILETYPE_VBOX_OVF ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_EXT_OVF))"'
+ $(APPEND) $@ 'IDI_FILETYPE_VBOX_OVA ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_EXT_OVA))"'
+ $(APPEND) $@ 'IDI_FILETYPE_VBOX_OVF ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_EXT_OVF))"'
+ $(APPEND) $@ 'IDI_FILETYPE_VBOX_VMDK ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_EXT_VMDK))"'
+ $(APPEND) $@ 'IDI_FILETYPE_VBOX_VHD ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_EXT_VHD))"'
+ $(APPEND) $@ 'IDI_FILETYPE_VBOX_HDD ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_EXT_HDD))"'
include $(KBUILD_PATH)/subfooter.kmk
diff --git a/src/VBox/Installer/win/Resources/VBoxRes.rc b/src/VBox/Installer/win/Resources/VBoxRes.rc
index a5a61624b..367025391 100644
--- a/src/VBox/Installer/win/Resources/VBoxRes.rc
+++ b/src/VBox/Installer/win/Resources/VBoxRes.rc
@@ -1,4 +1,4 @@
-/* $Id: VBoxRes.rc $ */
+/* $Id: VBoxRes.rc 34454 2010-11-29 11:27:20Z vboxsync $ */
/** @file
* VBoxRes - Resource file for VirtualBox binaries.
*/
diff --git a/src/VBox/Installer/win/Resources/dummy.cpp b/src/VBox/Installer/win/Resources/dummy.cpp
index 5a40e3698..6bd5dca1b 100644
--- a/src/VBox/Installer/win/Resources/dummy.cpp
+++ b/src/VBox/Installer/win/Resources/dummy.cpp
@@ -1,4 +1,4 @@
-/* $Id: dummy.cpp $ */
+/* $Id: dummy.cpp 35477 2011-01-11 11:20:35Z vboxsync $ */
/** @file
* dummy.cpp - file to make kBuild happy when building a resource only DLL.
*/
diff --git a/src/VBox/Installer/win/Resources/resource.h b/src/VBox/Installer/win/Resources/resource.h
index 3b76f2c18..af271d98e 100644
--- a/src/VBox/Installer/win/Resources/resource.h
+++ b/src/VBox/Installer/win/Resources/resource.h
@@ -1,4 +1,4 @@
-/* $Id: resource.h $ */
+/* $Id: resource.h 37549 2011-06-20 08:44:19Z vboxsync $ */
/** @file
* resource.h - resource header file.
*/
@@ -22,3 +22,7 @@
#define IDI_FILETYPE_VBOX_OVF 301
#define IDI_FILETYPE_VBOX_OVA 302
+#define IDI_FILETYPE_VBOX_VDI 303
+#define IDI_FILETYPE_VBOX_VMDK 304
+#define IDI_FILETYPE_VBOX_VHD 305
+#define IDI_FILETYPE_VBOX_HDD 306
diff --git a/src/VBox/Installer/win/Stub/Makefile.kmk b/src/VBox/Installer/win/Stub/Makefile.kmk
index 6b8ca3f28..a8f89ebe7 100644
--- a/src/VBox/Installer/win/Stub/Makefile.kmk
+++ b/src/VBox/Installer/win/Stub/Makefile.kmk
@@ -1,4 +1,4 @@
-# $Id: Makefile.kmk $
+# $Id: Makefile.kmk 37991 2011-07-18 09:26:43Z vboxsync $
## @file
# Sub-Makefile for the stub installer.
#
@@ -27,7 +27,7 @@ TEMPLATE_VBOXSTUB_POST_CMDS = $(NO_SUCH_VARIABLE)
PROGRAMS.x86 += VBoxStub
VBoxStub_TEMPLATE= VBOXSTUB
-VBoxStub_DEFS = _WIN32_WINNT=0x0400 IN_RT_R3
+VBoxStub_DEFS = _WIN32_WINNT=0x0501 IN_RT_R3
VBoxStub_SOURCES = \
VBoxStub.cpp \
VBoxStub.rc
@@ -42,13 +42,22 @@ VBoxStub.cpp_DEPS = $(VBOX_SVN_REV_KMK)
# The icon location is configurable.
VBoxStub.rc_INCS += $(VBoxStub_0_OUTDIR)
-VBoxStub.rc_DEPS += $(VBoxStub_0_OUTDIR)/VBoxStub-icon.rc
-VBoxStub.rc_CLEAN = $(VBoxStub_0_OUTDIR)/VBoxStub-icon.rc
+VBoxStub.rc_DEPS += \
+ $(VBoxStub_0_OUTDIR)/VBoxStub-icon.rc \
+ $(VBoxStub_0_OUTDIR)/VBoxStub-manifest.rc
+VBoxStub.rc_CLEAN = \
+ $(VBoxStub_0_OUTDIR)/VBoxStub-icon.rc \
+ $(VBoxStub_0_OUTDIR)/VBoxStub-manifest.rc
# Icon include file.
$$(VBoxStub_0_OUTDIR)/VBoxStub-icon.rc: $(VBOX_WINDOWS_ICON_FILE) $(MAKEFILE_CURRENT) | $$(dir $$@)
$(APPEND) -t $@ 'IDI_VIRTUALBOX ICON DISCARDABLE "$(subst /,\\,$(VBOX_WINDOWS_ICON_FILE))"'
+# Manifest.
+VBOX_STUB_MANIFEST_FILE := $(PATH_SUB_CURRENT)/VBoxStub.manifest
+$$(VBoxStub_0_OUTDIR)/VBoxStub-manifest.rc: $(VBOX_STUB_MANIFEST_FILE) $(MAKEFILE_CURRENT) | $$(dir $$@)
+ $(APPEND) -t $@ 'APP_MANIFEST RT_MANIFEST "$(subst /,\\,$(VBOX_STUB_MANIFEST_FILE))"'
+
endif # x86 only
include $(KBUILD_PATH)/subfooter.kmk
diff --git a/src/VBox/Installer/win/Stub/VBoxStub.cpp b/src/VBox/Installer/win/Stub/VBoxStub.cpp
index 5b57bc766..7491d79a9 100644
--- a/src/VBox/Installer/win/Stub/VBoxStub.cpp
+++ b/src/VBox/Installer/win/Stub/VBoxStub.cpp
@@ -1,4 +1,4 @@
-/* $Id: VBoxStub.cpp $ */
+/* $Id: VBoxStub.cpp 37989 2011-07-18 08:51:46Z vboxsync $ */
/** @file
* VBoxStub - VirtualBox's Windows installer stub.
*/
@@ -19,6 +19,7 @@
* Header Files *
*******************************************************************************/
#include <windows.h>
+#include <commctrl.h>
#include <lmerr.h>
#include <msiquery.h>
#include <objbase.h>
@@ -568,6 +569,16 @@ int WINAPI WinMain(HINSTANCE hInstance,
AssertMsgBreak(uLogLevel == ERROR_SUCCESS, ("Could not set installer logging level!\n"));
}
+ /* Initialize the common controls (extended version). This is necessary to
+ * run the actual .MSI installers with the new fancy visual control
+ * styles (XP+). Also, an integrated manifest is required. */
+ INITCOMMONCONTROLSEX ccEx;
+ ccEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
+ ccEx.dwICC = ICC_LINK_CLASS | ICC_LISTVIEW_CLASSES | ICC_PAGESCROLLER_CLASS |
+ ICC_PROGRESS_CLASS | ICC_STANDARD_CLASSES | ICC_TAB_CLASSES | ICC_TREEVIEW_CLASSES |
+ ICC_UPDOWN_CLASS | ICC_USEREX_CLASSES | ICC_WIN95_CLASSES;
+ InitCommonControlsEx(&ccEx); /* Ignore failure. */
+
UINT uStatus = ::MsiInstallProductA(pszTempFile, szMSIArgs);
if ( (uStatus != ERROR_SUCCESS)
&& (uStatus != ERROR_SUCCESS_REBOOT_REQUIRED)
diff --git a/src/VBox/Installer/win/Stub/VBoxStub.h b/src/VBox/Installer/win/Stub/VBoxStub.h
index 455023a67..4931bcd36 100644
--- a/src/VBox/Installer/win/Stub/VBoxStub.h
+++ b/src/VBox/Installer/win/Stub/VBoxStub.h
@@ -1,4 +1,4 @@
-/* $Id: VBoxStub.h $ */
+/* $Id: VBoxStub.h 31667 2010-08-13 15:57:03Z vboxsync $ */
/** @file
* VBoxStub - VirtualBox's Windows installer stub.
*/
diff --git a/src/VBox/Installer/win/Stub/VBoxStub.manifest b/src/VBox/Installer/win/Stub/VBoxStub.manifest
new file mode 100644
index 000000000..f2076feec
--- /dev/null
+++ b/src/VBox/Installer/win/Stub/VBoxStub.manifest
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<assemblyIdentity
+ version="1.0.0.0"
+ processorArchitecture="*"
+ name="VBoxStub.exe"
+ type="win32"
+/>
+<description>VirtualBox Windows Installer</description>
+<dependency>
+ <dependentAssembly>
+ <assemblyIdentity
+ type="win32"
+ name="Microsoft.Windows.Common-Controls"
+ version="6.0.0.0"
+ processorArchitecture="*"
+ publicKeyToken="6595b64144ccf1df"
+ language="*"
+ />
+ </dependentAssembly>
+</dependency>
+</assembly>
diff --git a/src/VBox/Installer/win/Stub/VBoxStub.rc b/src/VBox/Installer/win/Stub/VBoxStub.rc
index c2f00374d..a02e8e5b6 100644
--- a/src/VBox/Installer/win/Stub/VBoxStub.rc
+++ b/src/VBox/Installer/win/Stub/VBoxStub.rc
@@ -1,10 +1,10 @@
-/* $Id: VBoxStub.rc $*/
+/* $Id: VBoxStub.rc 37987 2011-07-18 08:11:16Z vboxsync $*/
/** @file
* Resource file for the Windows install stub program.
*/
/*
- * Copyright (C) 2009-2010 Oracle Corporation
+ * Copyright (C) 2009-2011 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
@@ -51,4 +51,5 @@ BEGIN
END
#include "VBoxStub-icon.rc"
+#include "VBoxStub-manifest.rc"
diff --git a/src/VBox/Installer/win/Stub/resource.h b/src/VBox/Installer/win/Stub/resource.h
index c0bddfbc6..b9d3adc0e 100644
--- a/src/VBox/Installer/win/Stub/resource.h
+++ b/src/VBox/Installer/win/Stub/resource.h
@@ -1,4 +1,4 @@
-/* $Id: resource.h $ */
+/* $Id: resource.h 37987 2011-07-18 08:11:16Z vboxsync $ */
/** @file
* VBoxStub - resource header file.
*/
@@ -14,5 +14,8 @@
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
-
#define IDI_VIRTUALBOX 101
+
+#define RT_MANIFEST 24
+#define APP_MANIFEST 1
+
diff --git a/src/VBox/Installer/win/StubBld/Makefile.kmk b/src/VBox/Installer/win/StubBld/Makefile.kmk
index 45aa9b402..99299d722 100644
--- a/src/VBox/Installer/win/StubBld/Makefile.kmk
+++ b/src/VBox/Installer/win/StubBld/Makefile.kmk
@@ -1,4 +1,4 @@
-# $Id: Makefile.kmk $
+# $Id: Makefile.kmk 31667 2010-08-13 15:57:03Z vboxsync $
## @file
# Sub-Makefile for the stub builder.
#
diff --git a/src/VBox/Installer/win/StubBld/VBoxStubBld.cpp b/src/VBox/Installer/win/StubBld/VBoxStubBld.cpp
index 862b088da..95e57dd78 100644
--- a/src/VBox/Installer/win/StubBld/VBoxStubBld.cpp
+++ b/src/VBox/Installer/win/StubBld/VBoxStubBld.cpp
@@ -1,4 +1,4 @@
-/* $Id: VBoxStubBld.cpp $ */
+/* $Id: VBoxStubBld.cpp 32388 2010-09-10 10:13:07Z vboxsync $ */
/** @file
* VBoxStubBld - VirtualBox's Windows installer stub builder.
*/
diff --git a/src/VBox/Installer/win/StubBld/VBoxStubBld.h b/src/VBox/Installer/win/StubBld/VBoxStubBld.h
index 67005674c..242996a0e 100644
--- a/src/VBox/Installer/win/StubBld/VBoxStubBld.h
+++ b/src/VBox/Installer/win/StubBld/VBoxStubBld.h
@@ -1,4 +1,4 @@
-/* $Id: VBoxStubBld.h $ */
+/* $Id: VBoxStubBld.h 31667 2010-08-13 15:57:03Z vboxsync $ */
/** @file
* VBoxStubBld - VirtualBox's Windows installer stub builder.
*/
diff --git a/src/VBox/Installer/win/UserInterface.wxi b/src/VBox/Installer/win/UserInterface.wxi
index 7e1860322..24631a2b5 100644
--- a/src/VBox/Installer/win/UserInterface.wxi
+++ b/src/VBox/Installer/win/UserInterface.wxi
@@ -1,8 +1,8 @@
-<?xml version="1.0" ?>
+<?xml version="1.0" encoding="UTF-8"?>
<!--
- User Interface Include for VirtualBox WiX script
+ User interface include for VirtualBox WiX script.
- Copyright (C) 2006-2010 Oracle Corporation
+ Copyright (C) 2006-2011 Oracle Corporation
This file is part of VirtualBox Open Source Edition (OSE), as
available from http://www.virtualbox.org. This file is free software;
@@ -13,39 +13,35 @@
hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-->
-<Include>
-
+<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
<UI>
- <Property Id="DefaultUIFont">DlgFont8</Property>
- <!-- <Property Id="ErrorDialog">ErrorDlg</Property> -->
-
<!-- This dialog will be shown when the user cancels the installation -->
- <Dialog Id="CancelDlg" Width="260" Height="85" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
- <Control Id="No" Type="PushButton" X="132" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_No)">
+ <Dialog Id="VBoxCancelDlg" Width="260" Height="85" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
+ <Control Id="No" Type="PushButton" X="132" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_No)">
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
- <Control Id="Yes" Type="PushButton" X="72" Y="57" Width="56" Height="17" Text="$(loc.ButtonText_Yes)">
+ <Control Id="Yes" Type="PushButton" X="72" Y="57" Width="56" Height="17" Text="!(loc.ButtonText_Yes)">
<Publish Event="EndDialog" Value="Exit">1</Publish>
</Control>
<Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30">
- <Text>$(loc.CancelDlg_Question)</Text>
+ <Text>!(loc.CancelDlg_Question)</Text>
</Control>
<Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Information icon" FixedSize="yes" IconSize="32" Text="[InfoIcon]" />
</Dialog>
<!-- This is the very first page the user will see -->
- <Dialog Id="WelcomeDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
+ <Dialog Id="VBoxWelcomeDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
<!-- The wizard has a bitmap as background. The source is defined as a property below. -->
<Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
<!-- Title text drawn on the background -->
<Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
- <Text>{\DlgVerdanaBold13}$(loc.WelcomeDlg_Header)</Text>
+ <Text>{\DlgVerdanaBold13}!(loc.WelcomeDlg_Header)</Text>
</Control>
<!-- Text saying what we gonna do -->
<Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.WelcomeDlg_Body)</Text>
+ <Text>!(loc.WelcomeDlg_Body)</Text>
</Control>
<!-- And a line for looking nice... -->
@@ -56,57 +52,57 @@
<Text>[Version_text] $(var.Property_Version)</Text>
</Control>
- <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Next)">
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Next)">
<?if $(env.VBOX_WITH_LICENSE_DISPLAY) = "yes" ?>
<!-- Next dialog is the license agreement -->
- <Publish Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
+ <Publish Event="NewDialog" Value="VBoxLicenseAgreementDlg">1</Publish>
<?else ?>
<!-- Decide which dialog to show next: The serial number dialog (if this is a branded build)
or directly proceed to the customization dialog (Vbox not installed yet) -->
<?if $(env.VBOX_WITH_SERIALNUMBER_INSTALL) = "yes" ?>
- <Publish Event="NewDialog" Value="CheckSerialDlg">1</Publish>
+ <Publish Event="NewDialog" Value="VBoxCheckSerialDlg">1</Publish>
<?else ?>
- <Publish Event="NewDialog" Value="CustomizeDlg"><![CDATA[(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED)]]></Publish>
- <Publish Event="NewDialog" Value="CustomizeDlg"><![CDATA[(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED)]]></Publish>
+ <Publish Event="NewDialog" Value="VBoxCustomizeDlg"><![CDATA[(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED)]]></Publish>
+ <Publish Event="NewDialog" Value="VBoxCustomizeDlg"><![CDATA[(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED)]]></Publish>
<?endif ?>
<?endif ?>
</Control>
<!-- Canceling will bring up a confirmation dialog ('SpawnDialog' attribute) -->
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
<!-- Uncomment if we need a 'back' button
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Back)" />
-->
</Dialog>
<!-- The radio button group used for the license agreement page -->
<RadioButtonGroup Property="IAgree">
- <RadioButton Text="{\DlgFont8}$(loc.LicenseAgreementDlg_Accept)" Value="Yes" X="5" Y="0" Width="250" Height="15" />
- <RadioButton Text="{\DlgFont8}$(loc.LicenseAgreementDlg_Decline)" Value="No" X="5" Y="20" Width="250" Height="15" />
+ <RadioButton Text="{\DlgFont8}!(loc.LicenseAgreementDlg_Accept)" Value="Yes" X="5" Y="0" Width="250" Height="15" />
+ <RadioButton Text="{\DlgFont8}!(loc.LicenseAgreementDlg_Decline)" Value="No" X="5" Y="20" Width="250" Height="15" />
</RadioButtonGroup>
<!-- The dialog page showing the license. The user has to set the appropriate check box to proceed -->
- <Dialog Id="LicenseAgreementDlg" Width="370" Height="270" Title="[ProductName] License Agreement" NoMinimize="yes">
+ <Dialog Id="VBoxLicenseAgreementDlg" Width="370" Height="270" Title="[ProductName] License Agreement" NoMinimize="yes">
<!-- The bitmap at the top of the dialog. This dialog doesn't have a background -->
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<!-- The font used here is defined below -->
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>[DlgTitleFont]$(loc.LicenseAgreementDlg_Header)</Text>
+ <Text>[DlgTitleFont]!(loc.LicenseAgreementDlg_Header)</Text>
</Control>
<Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.LicenseAgreementDlg_Body)</Text>
+ <Text>!(loc.LicenseAgreementDlg_Body)</Text>
</Control>
<!-- The line directly below of the banner bmp -->
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<!-- The license text should be a RTF text so we have formatting -->
- <Control Id="AgreementText" Type="ScrollableText" X="20" Y="60" Width="330" Height="120" Sunken="yes" TabSkip="no" Text="$(loc.LicenseText)"/>
+ <Control Id="AgreementText" Type="ScrollableText" X="20" Y="60" Width="330" Height="120" Sunken="yes" TabSkip="no" Text="!(loc.LicenseText)"/>
<!-- This radio button group is defined below -->
<Control Id="Buttons" Type="RadioButtonGroup" X="20" Y="187" Width="330" Height="40" Property="IAgree" />
@@ -119,43 +115,43 @@
<Text>[Version_text] $(var.Property_Version)</Text>
</Control>
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Back)">
- <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Back)">
+ <Publish Event="NewDialog" Value="VBoxWelcomeDlg">1</Publish>
</Control>
- <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Next)">
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Next)">
<!-- 'Next' button is only enabled when 'I agree' radio button is selected -->
<Condition Action="disable"><![CDATA[IAgree <> "Yes"]]></Condition>
<Condition Action="enable">IAgree = "Yes"</Condition>
- <Publish Property="InstallMode" Value="$(loc.InstallModeCustom)">1</Publish>
+ <Publish Property="InstallMode" Value="!(loc.InstallModeCustom)">1</Publish>
<!-- Decide which dialog to show next: The serial number dialog (if this is a branded build)
or directly proceed to the customization dialog (Vbox not installed yet) -->
<?if $(env.VBOX_WITH_SERIALNUMBER_INSTALL) = "yes" ?>
- <Publish Event="NewDialog" Value="CheckSerialDlg">1</Publish>
+ <Publish Event="NewDialog" Value="VBoxCheckSerialDlg">1</Publish>
<?else ?>
- <Publish Event="NewDialog" Value="CustomizeDlg"><![CDATA[(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED)]]></Publish>
- <Publish Event="NewDialog" Value="CustomizeDlg"><![CDATA[(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED)]]></Publish>
+ <Publish Event="NewDialog" Value="VBoxCustomizeDlg"><![CDATA[(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED)]]></Publish>
+ <Publish Event="NewDialog" Value="VBoxCustomizeDlg"><![CDATA[(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED)]]></Publish>
<?endif ?>
</Control>
<!-- Canceling will bring up a confirmation dialog ('SpawnDialog' attribute) -->
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
</Dialog>
- <Dialog Id="CheckSerialDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
+ <Dialog Id="VBoxCheckSerialDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
<!-- The wizard has a bitmap as background. The source is defined as a property below. -->
<Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
<Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
- <Text>{\DlgVerdanaBold13}$(loc.CheckSerialDlg_Header)</Text>
+ <Text>{\DlgVerdanaBold13}!(loc.CheckSerialDlg_Header)</Text>
</Control>
<!-- Text saying what we gonna do -->
<Control Id="Description" Type="Text" X="135" Y="50" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.CheckSerialDlg_Body)</Text>
+ <Text>!(loc.CheckSerialDlg_Body)</Text>
</Control>
<Control Id="Serial1Edit" Type="Edit" X="135" Y="90" Width="30" Height="18" Property="Serial1" Text="{5}">
@@ -175,7 +171,7 @@
</Control>
<Control Id="Description3" Type="Text" X="135" Y="120" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.CheckSerialDlg_Footer)</Text>
+ <Text>!(loc.CheckSerialDlg_Footer)</Text>
</Control>
<!-- And a line for looking nice... -->
@@ -186,42 +182,42 @@
<Text>[Version_text] $(var.Property_Version)</Text>
</Control>
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Back)">
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Back)">
<?if $(env.VBOX_WITH_LICENSE_DISPLAY) = "yes" ?>
- <Publish Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>
+ <Publish Event="NewDialog" Value="VBoxLicenseAgreementDlg">1</Publish>
<?else ?>
- <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
+ <Publish Event="NewDialog" Value="VBoxWelcomeDlg">1</Publish>
<?endif ?>
</Control>
- <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Check)">
- <Publish Event="DoAction" Value="CheckSerial">1</Publish>
- <Publish Event="NewDialog" Value="CustomizeDlg"><![CDATA[(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED) AND (SERIALVALID = "1")]]></Publish>
- <Publish Event="NewDialog" Value="CustomizeDlg"><![CDATA[(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED) AND (SERIALVALID = "1")]]></Publish>
- <Publish Event="NewDialog" Value="WrongSerialDlg"><![CDATA[SERIALVALID = "0"]]></Publish>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Check)">
+ <Publish Event="DoAction" Value="ca_CheckSerial">1</Publish>
+ <Publish Event="NewDialog" Value="VBoxCustomizeDlg"><![CDATA[(PREVIOUSVERSIONSINSTALLED OR NEWERVERSIONDETECTED) AND (SERIALVALID = "1")]]></Publish>
+ <Publish Event="NewDialog" Value="VBoxCustomizeDlg"><![CDATA[(NOT PREVIOUSVERSIONSINSTALLED) AND (NOT NEWERVERSIONDETECTED) AND (SERIALVALID = "1")]]></Publish>
+ <Publish Event="NewDialog" Value="VBoxWrongSerialDlg"><![CDATA[SERIALVALID = "0"]]></Publish>
</Control>
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
</Dialog>
- <Dialog Id="WrongSerialDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
+ <Dialog Id="VBoxWrongSerialDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
<!-- The wizard has a bitmap as background. The source is defined as a property below. -->
<Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
<!-- Title text drawn on the background -->
<Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
- <Text>{\DlgInvalidSerial}$(loc.WrongSerialDlg_Header)</Text>
+ <Text>{\DlgInvalidSerial}!(loc.WrongSerialDlg_Header)</Text>
</Control>
<!-- Text saying what we gonna do -->
<Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.WrongSerialDlg_Desc1)</Text>
+ <Text>!(loc.WrongSerialDlg_Desc1)</Text>
</Control>
<Control Id="Description2" Type="Text" X="135" Y="95" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.WrongSerialDlg_Desc2)</Text>
+ <Text>!(loc.WrongSerialDlg_Desc2)</Text>
</Control>
<!-- And a line for looking nice... -->
@@ -232,76 +228,76 @@
<Text>[Version_text] $(var.Property_Version)</Text>
</Control>
- <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Back)">
- <Publish Event="NewDialog" Value="CheckSerialDlg">1</Publish>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Back)">
+ <Publish Event="NewDialog" Value="VBoxCheckSerialDlg">1</Publish>
</Control>
<!-- Canceling will bring up a confirmation dialog ('SpawnDialog' attribute) -->
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
</Dialog>
<!-- Dialog used to set another installation path. This is taken from the tutorial template on the web and can also be
used for package selection etc. if necessary after some tweaking. -->
- <Dialog Id="CustomizeDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
+ <Dialog Id="VBoxCustomizeDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>[DlgTitleFont]$(loc.CustomizeDlg_CustomSetup)</Text>
+ <Text>[DlgTitleFont]!(loc.CustomizeDlg_CustomSetup)</Text>
</Control>
<Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.CustomizeDlg_SelFeatures)</Text>
+ <Text>!(loc.CustomizeDlg_SelFeatures)</Text>
</Control>
<Control Id="Text" Type="Text" X="25" Y="55" Width="320" Height="20">
- <Text>$(loc.CustomizeDlg_IconTree)</Text>
+ <Text>!(loc.CustomizeDlg_IconTree)</Text>
</Control>
<Control Id="Tree" Type="SelectionTree" X="25" Y="85" Width="175" Height="95" Property="_BrowseProperty"
Sunken="yes" TabSkip="no" Text="Tree of selections" />
- <Control Id="Browse" Type="PushButton" X="304" Y="200" Width="56" Height="17" Text="$(loc.ButtonText_Browse)">
- <Publish Event="SelectionBrowse" Value="BrowseDlg">1</Publish>
+ <Control Id="Browse" Type="PushButton" X="304" Y="200" Width="56" Height="17" Text="!(loc.ButtonText_Browse)">
+ <Publish Event="SelectionBrowse" Value="VBoxBrowseDlg">1</Publish>
<Condition Action="hide">Installed</Condition>
</Control>
<Control Id="DiskCost" Type="PushButton" X="111" Y="243" Width="56" Height="17">
- <Text>$(loc.CustomizeDlg_DiskUsage)</Text>
- <Publish Event="SpawnDialog" Value="DiskCostDlg">1</Publish>
+ <Text>!(loc.CustomizeDlg_DiskUsage)</Text>
+ <Publish Event="SpawnDialog" Value="VBoxDiskCostDlg">1</Publish>
<Subscribe Event="SelectionNoItems" Attribute="Enabled" />
</Control>
<Control Id="Box" Type="GroupBox" X="210" Y="81" Width="140" Height="98" />
<Control Id="ItemDescription" Type="Text" X="215" Y="90" Width="131" Height="30">
- <Text>$(loc.CustomizeDlg_SelItemDesc)</Text>
+ <Text>!(loc.CustomizeDlg_SelItemDesc)</Text>
<Subscribe Event="SelectionDescription" Attribute="Text" />
</Control>
<Control Id="ItemSize" Type="Text" X="215" Y="130" Width="131" Height="45">
- <Text>$(loc.CustomizeDlg_SelItemSize)</Text>
+ <Text>!(loc.CustomizeDlg_SelItemSize)</Text>
<Subscribe Event="SelectionSize" Attribute="Text" />
</Control>
<Control Id="Location" Type="Text" X="75" Y="200" Width="215" Height="20">
- <Text>$(loc.CustomizeDlg_SelItemPath)</Text>
+ <Text>!(loc.CustomizeDlg_SelItemPath)</Text>
<Subscribe Event="SelectionPath" Attribute="Text" />
<Subscribe Event="SelectionPathOn" Attribute="Visible" />
<Condition Action="hide">Installed</Condition>
</Control>
- <Control Id="LocationLabel" Type="Text" X="25" Y="200" Width="50" Height="10" Text="$(loc.CustomizeDlg_Location)">
+ <Control Id="LocationLabel" Type="Text" X="25" Y="200" Width="50" Height="10" Text="!(loc.CustomizeDlg_Location)">
<Subscribe Event="SelectionPathOn" Attribute="Visible" />
<Condition Action="hide">Installed</Condition>
</Control>
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Back)">
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Back)">
<?if $(env.VBOX_WITH_LICENSE_DISPLAY) = "yes" ?>
- <Publish Event="NewDialog" Value="LicenseAgreementDlg"><![CDATA[(NOT CHECKSERIAL) AND (InstallMode = "$(loc.InstallModeCustom)")]]></Publish>
- <Publish Event="NewDialog" Value="CheckSerialDlg"><![CDATA[CHECKSERIAL]]></Publish>
+ <Publish Event="NewDialog" Value="VBoxLicenseAgreementDlg"><![CDATA[(NOT CHECKSERIAL) AND (InstallMode = "!(loc.InstallModeCustom)")]]></Publish>
+ <Publish Event="NewDialog" Value="VBoxCheckSerialDlg"><![CDATA[CHECKSERIAL]]></Publish>
<?else ?>
- <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
+ <Publish Event="NewDialog" Value="VBoxWelcomeDlg">1</Publish>
<?endif ?>
</Control>
- <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Next)">
- <Publish Event="NewDialog" Value="Customize2Dlg">1</Publish>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Next)">
+ <Publish Event="NewDialog" Value="VBoxCustomize2Dlg">1</Publish>
<Subscribe Event="SelectionNoItems" Attribute="Enabled" />
</Control>
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
<!-- Build number text drawn left bottom -->
@@ -311,17 +307,17 @@
</Control>
</Dialog>
- <Dialog Id="Customize2Dlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
+ <Dialog Id="VBoxCustomize2Dlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="220" Height="40" Transparent="yes" NoPrefix="yes">
- <Text>[DlgTitleFont]$(loc.CustomizeDlg_CustomSetup)</Text>
+ <Text>[DlgTitleFont]!(loc.CustomizeDlg_CustomSetup)</Text>
</Control>
<Control Id="Description" Type="Text" X="25" Y="23" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.CustomizeDlg_SelFeatures)</Text>
+ <Text>!(loc.CustomizeDlg_SelFeatures)</Text>
</Control>
<Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="20">
- <Text>$(loc.Customize2Dlg_Desc)</Text>
+ <Text>!(loc.Customize2Dlg_Desc)</Text>
</Control>
<!-- Note the gray background behind the checkboxes. Unfortunately there's no easy way to
fix this, without fixing it in the WiX source code. Because the control's background
@@ -332,29 +328,29 @@
Also see: http://osdir.com/ml/windows.devel.wix.user/2005-02/msg00300.html -->
<Control Id="DesktopShortcutCheckBox" Type="CheckBox" X="25" Y="95" Width="200" Height="17"
Property="INSTALLDESKTOPSHORTCUT" CheckBoxValue="1">
- <Text>$(loc.Customize2Dlg_CreateShortcut)</Text>
+ <Text>!(loc.Customize2Dlg_CreateShortcut)</Text>
</Control>
<Control Id="QuicklaunchShortcutCheckBox" Type="CheckBox" X="25" Y="115" Width="200" Height="17"
- Property="INSTALLQUICKLAUNCHSHORTCUT" CheckBoxValue="1">
- <Text>$(loc.Customize2Dlg_CreateQuickLaunch)</Text>
+ Property="INSTALLQUICKLAUNCHSHORTCUT" CheckBoxValue="1">
+ <Text>!(loc.Customize2Dlg_CreateQuickLaunch)</Text>
</Control>
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17"
- Default="yes" Cancel="yes" Text="$(loc.ButtonText_Next)">
+ Default="yes" Cancel="yes" Text="!(loc.ButtonText_Next)">
<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
- <Publish Event="NewDialog" Value="WarnDisconNetIfacesDlg"><![CDATA[(&VBoxNetworkFlt=3) AND NOT(!VBoxNetworkFlt=3)]]></Publish>
- <Publish Event="NewDialog" Value="VerifyReadyDlg"><![CDATA[(&VBoxNetworkFlt<3)]]></Publish>
+ <Publish Event="NewDialog" Value="VBoxWarnDisconNetIfacesDlg"><![CDATA[(&ft_VBoxNetworkFlt=3) AND NOT(!ft_VBoxNetworkFlt=3)]]></Publish>
+ <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg"><![CDATA[(&ft_VBoxNetworkFlt<3)]]></Publish>
<?else ?>
- <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg">1</Publish>
<?endif?>
</Control>
<Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17"
- Text="$(loc.ButtonText_Back)">
- <Publish Event="NewDialog" Value="CustomizeDlg">1</Publish>
+ Text="!(loc.ButtonText_Back)">
+ <Publish Event="NewDialog" Value="VBoxCustomizeDlg">1</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17"
- Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
<!-- Build number text drawn left bottom -->
@@ -364,27 +360,27 @@
</Control>
</Dialog>
- <Dialog Id="WarnDisconNetIfacesDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
+ <Dialog Id="VBoxWarnDisconNetIfacesDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
<!-- The wizard has a bitmap as background. The source is defined as a property below. -->
<Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
<!-- Title text drawn on the background -->
<Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
- <Text>{\DlgWarnDisconNetIfaces}$(loc.WarnDisconNetIfacesDlg_Title)</Text>
+ <Text>{\DlgWarnDisconNetIfaces}!(loc.WarnDisconNetIfacesDlg_Title)</Text>
</Control>
<Control Id="Title2" Type="Text" X="135" Y="40" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
- <Text>{\DlgWarnDisconNetIfaces}$(loc.WarnDisconNetIfacesDlg_Title2)</Text>
+ <Text>{\DlgWarnDisconNetIfaces}!(loc.WarnDisconNetIfacesDlg_Title2)</Text>
</Control>
<!-- Text saying what we gonna do -->
<Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.WarnDisconNetIfacesDlg_Desc)</Text>
+ <Text>!(loc.WarnDisconNetIfacesDlg_Desc)</Text>
</Control>
<Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="130" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.WarnDisconNetIfacesDlg_Question)</Text>
+ <Text>!(loc.WarnDisconNetIfacesDlg_Question)</Text>
</Control>
<!-- And a line for looking nice... -->
@@ -396,107 +392,107 @@
</Control>
<!-- Next dialog is the warning dialog for TAP devices -->
- <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Yes)">
- <Publish Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Yes)">
+ <Publish Event="NewDialog" Value="VBoxVerifyReadyDlg">1</Publish>
</Control>
<!-- Canceling will bring up a confirmation dialog ('SpawnDialog' attribute) -->
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_No)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_No)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
</Dialog>
- <Dialog Id="DiskCostDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
- <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_OK)">
+ <Dialog Id="VBoxDiskCostDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
+ <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_OK)">
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.DiskCostDlg_SpaceRequired)</Text>
+ <Text>!(loc.DiskCostDlg_SpaceRequired)</Text>
</Control>
<Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
- <Text>$(loc.DiskCostDlg_NotEnoughSpace)</Text>
+ <Text>!(loc.DiskCostDlg_NotEnoughSpace)</Text>
</Control>
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>[DlgTitleFont]$(loc.DiskCostDlg_SpaceRequirements)</Text>
+ <Text>[DlgTitleFont]!(loc.DiskCostDlg_SpaceRequirements)</Text>
</Control>
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="VolumeList" Type="VolumeCostList" X="20" Y="100" Width="330" Height="120" Sunken="yes" Fixed="yes" Remote="yes">
- <Text>$(loc.DiskCostDlg_VolumeList)</Text>
+ <Text>!(loc.DiskCostDlg_VolumeList)</Text>
</Control>
</Dialog>
<!-- Dialog used to change the installation directory -->
- <Dialog Id="BrowseDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
+ <Dialog Id="VBoxBrowseDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
<Control Id="PathEdit" Type="PathEdit" X="84" Y="202" Width="261" Height="18" Property="_BrowseProperty" Indirect="yes" />
- <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_OK)">
+ <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_OK)">
<Publish Event="SetTargetPath" Value="[_BrowseProperty]">1</Publish>
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
- <Control Id="Cancel" Type="PushButton" X="240" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
+ <Control Id="Cancel" Type="PushButton" X="240" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
<Publish Event="Reset" Value="0">1</Publish>
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
- <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="$(loc.BrowseDlg_LookIn)" />
+ <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="!(loc.BrowseDlg_LookIn)" />
<Control Id="DirectoryCombo" Type="DirectoryCombo" X="70" Y="55" Width="220" Height="80"
Property="_BrowseProperty" Indirect="yes" Fixed="yes" Remote="yes">
<Subscribe Event="IgnoreChange" Attribute="IgnoreChange" />
</Control>
- <Control Id="Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="$(loc.BrowseDlg_UpOneLevelTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="[FolderUp]">
+ <Control Id="Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="!(loc.BrowseDlg_UpOneLevelTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="[FolderUp]">
<Publish Event="DirectoryListUp" Value="0">1</Publish>
</Control>
<Control Id="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19"
- ToolTip="$(loc.BrowseDlg_CreateNewFolderTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="[FolderNew]">
+ ToolTip="!(loc.BrowseDlg_CreateNewFolderTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="[FolderNew]">
<Publish Event="DirectoryListNew" Value="0">1</Publish>
</Control>
<Control Id="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="110"
Property="_BrowseProperty" Sunken="yes" Indirect="yes" TabSkip="no" />
- <Control Id="PathLabel" Type="Text" X="25" Y="205" Width="59" Height="10" TabSkip="no" Text="$(loc.BrowseDlg_FolderName)" />
+ <Control Id="PathLabel" Type="Text" X="25" Y="205" Width="59" Height="10" TabSkip="no" Text="!(loc.BrowseDlg_FolderName)" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.BrowseDlg_BrowseDestFolder)</Text>
+ <Text>!(loc.BrowseDlg_BrowseDestFolder)</Text>
</Control>
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>[DlgTitleFont]$(loc.BrowseDlg_ChangeCurFolder)</Text>
+ <Text>[DlgTitleFont]!(loc.BrowseDlg_ChangeCurFolder)</Text>
</Control>
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
</Dialog>
- <Dialog Id="PrepareDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" Modeless="yes">
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Dialog Id="VBoxPrepareDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" Modeless="yes">
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
<Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
</Dialog>
- <Dialog Id="VerifyReadyDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
+ <Dialog Id="VBoxVerifyReadyDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>[DlgTitleFont]$(loc.VerifyReadyDlg_ReadyToInstall)</Text>
+ <Text>[DlgTitleFont]!(loc.VerifyReadyDlg_ReadyToInstall)</Text>
</Control>
<Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.VerifyReadyDlg_ReadyToBegin)</Text>
+ <Text>!(loc.VerifyReadyDlg_ReadyToBegin)</Text>
</Control>
<Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="80">
- <Text>$(loc.VerifyReadyDlg_ClickInstall)</Text>
+ <Text>!(loc.VerifyReadyDlg_ClickInstall)</Text>
</Control>
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
- <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Install)">
+ <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Install)">
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
- <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
+ <Publish Event="SpawnDialog" Value="VBoxOutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
<Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
- <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
+ <Publish Event="SpawnDialog" Value="VBoxOutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
</Control>
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Back)">
- <Publish Event="NewDialog" Value="Customize2Dlg"><![CDATA[InstallMode = "$(loc.InstallModeCustom)"]]></Publish>
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Back)">
+ <Publish Event="NewDialog" Value="VBoxCustomize2Dlg"><![CDATA[InstallMode = "!(loc.InstallModeCustom)"]]></Publish>
</Control>
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
<!-- Build number text drawn left bottom -->
@@ -506,9 +502,9 @@
</Dialog>
<!-- This dialog is called after successful installation -->
- <Dialog Id="ExitDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
- <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_Finish)">
- <Publish Event="DoAction" Value="StartVBox"><![CDATA[STARTVBOX]]></Publish>
+ <Dialog Id="VBoxExitDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
+ <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_Finish)">
+ <Publish Event="DoAction" Value="ca_StartVBox"><![CDATA[STARTVBOX]]></Publish>
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
@@ -517,11 +513,11 @@
<Text>[Version_text] $(var.Property_Version)</Text>
</Control>
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Cancel)" />
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Cancel)" />
<Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Back)" />
<Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.ExitDlg_ClickFinish)</Text>
+ <Text>!(loc.ExitDlg_ClickFinish)</Text>
</Control>
<!-- Note the gray background behind the checkboxes. Unfortunately there's no easy way to
@@ -533,7 +529,7 @@
Also see: http://osdir.com/ml/windows.devel.wix.user/2005-02/msg00300.html -->
<Control Id="StartVBoxCheckBox" Type="CheckBox" X="135" Y="115" Width="200" Height="17"
Property="STARTVBOX" CheckBoxValue="1">
- <Text>$(loc.ExitDlg_StartVBox)</Text>
+ <Text>!(loc.ExitDlg_StartVBox)</Text>
<Condition Action="hide">
<![CDATA[(InstallMode="Repair") OR (InstallMode="Remove") OR
(InstallMode="Change")]]>
@@ -542,57 +538,69 @@
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
- <Text>{\DlgVerdanaBold13}$(loc.ExitDlg_InstComplete)</Text>
+ <Text>{\DlgVerdanaBold13}!(loc.ExitDlg_InstComplete)</Text>
</Control>
</Dialog>
<!-- This dialog is called after an error during installation -->
- <Dialog Id="FatalErrorDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
- <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_Finish)">
- <Publish Event="EndDialog" Value="Exit">1</Publish>
+ <Dialog Id="VBoxFatalErrorDlg" ErrorDialog="yes" Width="270" Height="150" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
+ <!-- Do *not* change the control IDs in the dialog! -->
+ <Control Id="ErrorIcon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Icon" FixedSize="yes" IconSize="32" Text="[ExclamationIcon]" />
+ <Control Id="ErrorText" Type="Text" X="75" Y="20" Width="155" Height="80" TabSkip="no">
+ <Text><![CDATA[{&DlgFont8}]]></Text>
</Control>
-
- <!-- Build number text drawn left bottom -->
- <Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
- <Text>[Version_text] $(var.Property_Version)</Text>
+ <Control Id="Y" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
+ <Text><![CDATA[{\DlgFont8}&Yes]]></Text>
+ <Publish Event="EndDialog" Value="ErrorYes">1</Publish>
</Control>
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Cancel)" />
- <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
- <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
- <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
- <Text>{\DlgVerdanaBold13}$(loc.FatalErrorDlg_Header)</Text>
+ <Control Id="A" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
+ <Text><![CDATA[{\DlgFont8}&Cancel]]></Text>
+ <Publish Event="EndDialog" Value="ErrorAbort">1</Publish>
</Control>
- <Control Id="Description1" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.FatalErrorDlg_Desc)</Text>
+ <Control Id="C" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
+ <Text><![CDATA[{\DlgFont8}&Cancel]]></Text>
+ <Publish Event="EndDialog" Value="ErrorCancel">1</Publish>
</Control>
- <Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.FatalErrorDlg_Footer)</Text>
+ <Control Id="I" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
+ <Text><![CDATA[{\DlgFont8}&Ignore]]></Text>
+ <Publish Event="EndDialog" Value="ErrorIgnore">1</Publish>
+ </Control>
+ <Control Id="N" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
+ <Text><![CDATA[{\DlgFont8}&No]]></Text>
+ <Publish Event="EndDialog" Value="ErrorNo">1</Publish>
+ </Control>
+ <Control Id="O" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
+ <Text><![CDATA[{\DlgFont8}&OK]]></Text>
+ <Publish Event="EndDialog" Value="ErrorOk">1</Publish>
+ </Control>
+ <Control Id="R" Type="PushButton" X="20" Y="110" Width="80" Height="18" TabSkip="yes">
+ <Text><![CDATA[{\DlgFont8}&Retry]]></Text>
+ <Publish Event="EndDialog" Value="ErrorRetry">1</Publish>
</Control>
</Dialog>
- <Dialog Id="FilesInUse" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" KeepModeless="yes">
- <Control Id="Retry" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_Retry)">
+ <Dialog Id="FilesInUse" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" KeepModeless="yes">
+ <Control Id="Retry" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_Retry)">
<Publish Event="EndDialog" Value="Retry">1</Publish>
</Control>
- <Control Id="Ignore" Type="PushButton" X="235" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Ignore)">
+ <Control Id="Ignore" Type="PushButton" X="235" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Ignore)">
<Publish Event="EndDialog" Value="Ignore">1</Publish>
</Control>
- <Control Id="Exit" Type="PushButton" X="166" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Exit)">
+ <Control Id="Exit" Type="PushButton" X="166" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Exit)">
<Publish Event="EndDialog" Value="Exit">1</Publish>
</Control>
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
- <Control Id="Text" Type="Text" X="20" Y="55" Width="330" Height="50" Text="$(loc.FilesInUse_Text)" />
+ <Control Id="Text" Type="Text" X="20" Y="55" Width="330" Height="50" Text="!(loc.FilesInUse_Text)" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
- <Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="$(loc.FilesInUse_Description)" />
- <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="[DlgTitleFont]$(loc.FilesInUse_Title)" />
+ <Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="!(loc.FilesInUse_Description)" />
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="[DlgTitleFont]!(loc.FilesInUse_Title)" />
<Control Id="List" Type="ListBox" X="20" Y="107" Width="330" Height="130" Property="FileInUseProcess" Sunken="yes" TabSkip="yes" />
</Dialog>
<!-- This dialog is shown if the user interrupts the installation process -->
- <Dialog Id="UserExitDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
- <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_Finish)">
+ <Dialog Id="VBoxUserExitDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
+ <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_Finish)">
<Publish Event="EndDialog" Value="Exit">1</Publish>
</Control>
<!-- Build number text drawn left bottom -->
@@ -600,25 +608,25 @@
<Text>[Version_text] $(var.Property_Version)</Text>
</Control>
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Cancel)" />
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Cancel)" />
<Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Back)" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
- <Text>{\DlgVerdanaBold13}$(loc.UserExitDlg_Header)</Text>
+ <Text>{\DlgVerdanaBold13}!(loc.UserExitDlg_Header)</Text>
</Control>
<Control Id="Description1" Type="Text" X="135" Y="70" Width="220" Height="40" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.UserExitDlg_Desc)</Text>
+ <Text>!(loc.UserExitDlg_Desc)</Text>
</Control>
<Control Id="Description2" Type="Text" X="135" Y="115" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.UserExitDlg_Footer)</Text>
+ <Text>!(loc.UserExitDlg_Footer)</Text>
</Control>
</Dialog>
<!-- Progress dialog shown during file copying and other lengthy operations -->
- <Dialog Id="ProgressDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" Modeless="yes">
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Dialog Id="VBoxProgressDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" Modeless="yes">
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
<!-- Build number text drawn left bottom -->
@@ -627,13 +635,13 @@
</Control>
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
- <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Next)" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Back)" />
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Next)" />
<Control Id="ActionText" Type="Text" X="70" Y="100" Width="265" Height="10">
<Subscribe Event="ActionText" Attribute="Text" />
</Control>
<Control Id="Text" Type="Text" X="35" Y="65" Width="300" Height="20">
- <Text>$(loc.ProgressDlg_PleaseWait)</Text>
+ <Text>!(loc.ProgressDlg_PleaseWait)</Text>
</Control>
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="20" Y="15" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
@@ -646,31 +654,31 @@
<Control Id="StatusLabel" Type="Text" X="35" Y="100" Width="35" Height="10" Text="Status:" />
</Dialog>
- <Dialog Id="ResumeDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
- <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="[$(loc.ButtonText_Install)]">
- <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
+ <Dialog Id="VBoxResumeDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
+ <Control Id="Install" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Install)">
+ <Publish Event="SpawnWaitDialog" Value="VBoxWaitForCostingDlg">CostingComplete = 1</Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
- <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg">
+ <Publish Event="SpawnDialog" Value="VBoxOutOfRbDiskDlg">
<![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]>
</Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
<Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
- <Publish Event="SpawnDialog" Value="OutOfDiskDlg">
+ <Publish Event="SpawnDialog" Value="VBoxOutOfDiskDlg">
<![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]>
</Publish>
</Control>
<!-- Build number text drawn left bottom -->
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
<Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Back)" />
<Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
- <Text>{\DlgVerdanaBold13}$(loc.ResumeDlg_Header)</Text>
+ <Text>{\DlgVerdanaBold13}!(loc.ResumeDlg_Header)</Text>
</Control>
<Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="30" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.ResumeDlg_Desc)</Text>
+ <Text>!(loc.ResumeDlg_Desc)</Text>
</Control>
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
@@ -680,26 +688,26 @@
<!-- This dialog is shown after the welcome page if the user restarts the MSI package on a system where the product is already installed. The user
may choose to repair the installation or remove it. -->
- <Dialog Id="MaintenanceTypeDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
+ <Dialog Id="VBoxMaintenanceTypeDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
<Control Id="RepairLabel" Type="Text" X="105" Y="90" Width="100" Height="10" TabSkip="no">
- <Text>[DlgTitleFont]$(loc.MaintenanceTypeDlg_Repair)</Text>
+ <Text>[DlgTitleFont]!(loc.MaintenanceTypeDlg_Repair)</Text>
</Control>
- <Control Id="RepairButton" Type="PushButton" X="50" Y="90" Width="38" Height="38" ToolTip="$(loc.MaintenanceTypeDlg_RepairTooltip)"
+ <Control Id="RepairButton" Type="PushButton" X="50" Y="90" Width="38" Height="38" ToolTip="!(loc.MaintenanceTypeDlg_RepairTooltip)"
Icon="yes" FixedSize="yes" IconSize="32" Text="[RepairIcon]">
<Publish Property="InstallMode" Value="Repair">1</Publish>
- <Publish Property="Progress1" Value="$(loc.MaintenanceTypeDlg_RepairProgress1)">1</Publish>
- <Publish Property="Progress2" Value="$(loc.MaintenanceTypeDlg_RepairProgress2)">1</Publish>
- <Publish Event="NewDialog" Value="VerifyRepairDlg">1</Publish>
+ <Publish Property="Progress1" Value="!(loc.MaintenanceTypeDlg_RepairProgress1)">1</Publish>
+ <Publish Property="Progress2" Value="!(loc.MaintenanceTypeDlg_RepairProgress2)">1</Publish>
+ <Publish Event="NewDialog" Value="VBoxVerifyRepairDlg">1</Publish>
</Control>
<Control Id="RemoveLabel" Type="Text" X="105" Y="163" Width="100" Height="10" TabSkip="no">
- <Text>[DlgTitleFont]$(loc.MaintenanceTypeDlg_Remove)</Text>
+ <Text>[DlgTitleFont]!(loc.MaintenanceTypeDlg_Remove)</Text>
</Control>
- <Control Id="RemoveButton" Type="PushButton" X="50" Y="163" Width="38" Height="38" ToolTip="$(loc.MaintenanceTypeDlg_RemoveTooltip)"
+ <Control Id="RemoveButton" Type="PushButton" X="50" Y="163" Width="38" Height="38" ToolTip="!(loc.MaintenanceTypeDlg_RemoveTooltip)"
Icon="yes" FixedSize="yes" IconSize="32" Text="[RemoveIcon]">
<Publish Property="InstallMode" Value="Remove">1</Publish>
- <Publish Property="Progress1" Value="$(loc.MaintenanceTypeDlg_RemoveProgress1)">1</Publish>
- <Publish Property="Progress2" Value="$(loc.MaintenanceTypeDlg_RemoveProgress2)">1</Publish>
- <Publish Event="NewDialog" Value="VerifyRemoveDlg">1</Publish>
+ <Publish Property="Progress1" Value="!(loc.MaintenanceTypeDlg_RemoveProgress1)">1</Publish>
+ <Publish Property="Progress2" Value="!(loc.MaintenanceTypeDlg_RemoveProgress2)">1</Publish>
+ <Publish Event="NewDialog" Value="VBoxVerifyRemoveDlg">1</Publish>
</Control>
<!-- Build number text drawn left bottom -->
@@ -707,35 +715,35 @@
<Text>[Version_text] $(var.Property_Version)</Text>
</Control>
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Back)">
- <Publish Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Back)">
+ <Publish Event="NewDialog" Value="VBoxMaintenanceWelcomeDlg">1</Publish>
</Control>
- <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Next)" />
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Next)" />
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.MaintenanceTypeDlg_SelOption)</Text>
+ <Text>!(loc.MaintenanceTypeDlg_SelOption)</Text>
</Control>
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="240" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>[DlgTitleFont]$(loc.MaintenanceTypeDlg_Header)</Text>
+ <Text>[DlgTitleFont]!(loc.MaintenanceTypeDlg_Header)</Text>
</Control>
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="RemoveText" Type="Text" X="105" Y="176" Width="230" Height="20">
- <Text>$(loc.MaintenanceTypeDlg_RemoveText)</Text>
+ <Text>!(loc.MaintenanceTypeDlg_RemoveText)</Text>
</Control>
<Control Id="RepairText" Type="Text" X="105" Y="102" Width="230" Height="30">
- <Text>$(loc.MaintenanceTypeDlg_RepairText)</Text>
+ <Text>!(loc.MaintenanceTypeDlg_RepairText)</Text>
</Control>
</Dialog>
<!-- This dialog is shown if the app is installed and the installation package is started again. It's the welcome
screen for maintenance -->
- <Dialog Id="MaintenanceWelcomeDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
+ <Dialog Id="VBoxMaintenanceWelcomeDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
<Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
- <Text>{\DlgVerdanaBold13}$(loc.MaintenanceWelcomeDlg_Header)</Text>
+ <Text>{\DlgVerdanaBold13}!(loc.MaintenanceWelcomeDlg_Header)</Text>
</Control>
<!-- Build number text drawn left bottom -->
@@ -743,42 +751,42 @@
<Text>[Version_text] $(var.Property_Version)</Text>
</Control>
- <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Next)">
- <Publish Event="SpawnWaitDialog" Value="WaitForCostingDlg">CostingComplete = 1</Publish>
- <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Next)">
+ <Publish Event="SpawnWaitDialog" Value="VBoxWaitForCostingDlg">CostingComplete = 1</Publish>
+ <Publish Event="NewDialog" Value="VBoxMaintenanceTypeDlg">1</Publish>
</Control>
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
<Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="$(loc.ButtonText_Back)" />
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="!(loc.ButtonText_Back)" />
<Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.MaintenanceWelcomeDlg_Desc)</Text>
+ <Text>!(loc.MaintenanceWelcomeDlg_Desc)</Text>
</Control>
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
</Dialog>
<!-- Out of disk error dialog -->
- <Dialog Id="OutOfDiskDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
+ <Dialog Id="VBoxOutOfDiskDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
<!-- Build number text drawn left bottom -->
<Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
<Text>[Version_text] $(var.Property_Version)</Text>
</Control>
- <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_OK)">
+ <Control Id="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_OK)">
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.OutOfDiskDlg_InstallationExceeds)</Text>
+ <Text>!(loc.OutOfDiskDlg_InstallationExceeds)</Text>
</Control>
<Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
- <Text>$(loc.OutOfDiskDlg_NotEnoughDiskSpace)</Text>
+ <Text>!(loc.OutOfDiskDlg_NotEnoughDiskSpace)</Text>
</Control>
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>[DlgTitleFont]$(loc.OutOfDiskDlg_OutOfDiskSpace)</Text>
+ <Text>[DlgTitleFont]!(loc.OutOfDiskDlg_OutOfDiskSpace)</Text>
</Control>
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="VolumeList" Type="VolumeCostList" X="20" Y="100" Width="330" Height="120" Sunken="yes" Fixed="yes" Remote="yes">
@@ -786,78 +794,78 @@
</Control>
</Dialog>
- <Dialog Id="OutOfRbDiskDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
- <Control Id="No" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="$(loc.ButtonText_No)">
+ <Dialog Id="VBoxOutOfRbDiskDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
+ <Control Id="No" Type="PushButton" X="304" Y="243" Width="56" Height="17" Default="yes" Cancel="yes" Text="!(loc.ButtonText_No)">
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
- <Control Id="Yes" Type="PushButton" X="240" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Yes)">
+ <Control Id="Yes" Type="PushButton" X="240" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Yes)">
<Publish Event="EnableRollback" Value="False">1</Publish>
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="Description" Type="Text" X="20" Y="20" Width="280" Height="20" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.OutOfRbDiskDlg_InstallationExceeds)</Text>
+ <Text>!(loc.OutOfRbDiskDlg_InstallationExceeds)</Text>
</Control>
<Control Id="Text" Type="Text" X="20" Y="53" Width="330" Height="40">
- <Text>$(loc.OutOfRbDiskDlg_NotEnoughDiskSpace)</Text>
+ <Text>!(loc.OutOfRbDiskDlg_NotEnoughDiskSpace)</Text>
</Control>
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>[DlgTitleFont]$(loc.OutOfRbDiskDlg_OutOfDiskSpace)</Text>
+ <Text>[DlgTitleFont]!(loc.OutOfRbDiskDlg_OutOfDiskSpace)</Text>
</Control>
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
<Control Id="VolumeList" Type="VolumeCostList" X="20" Y="140" Width="330" Height="80" Sunken="yes" Fixed="yes" Remote="yes" ShowRollbackCost="yes">
<Text>{120}{70}{70}{70}{70}</Text>
</Control>
<Control Id="Text2" Type="Text" X="20" Y="94" Width="330" Height="40">
- <Text>$(loc.OutOfRbDiskDlg_Desc)</Text>
+ <Text>!(loc.OutOfRbDiskDlg_Desc)</Text>
</Control>
</Dialog>
- <Dialog Id="VerifyRemoveDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
+ <Dialog Id="VBoxVerifyRemoveDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
<!-- Build number text drawn left bottom -->
<Control Id="Build" Type="Text" X="20" Y="247" Width="220" Height="10" Transparent="yes" NoPrefix="yes">
<Text>[Version_text] $(var.Property_Version)</Text>
</Control>
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Back)">
- <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Back)">
+ <Publish Event="NewDialog" Value="VBoxMaintenanceTypeDlg">1</Publish>
</Control>
- <Control Id="Remove" Type="PushButton" X="236" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Remove)">
+ <Control Id="Remove" Type="PushButton" X="236" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Remove)">
<Publish Event="Remove" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
- <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
+ <Publish Event="SpawnDialog" Value="VBoxOutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
<Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
- <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
+ <Publish Event="SpawnDialog" Value="VBoxOutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
</Control>
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
<Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.VerifyRemoveDlg_Desc)</Text>
+ <Text>!(loc.VerifyRemoveDlg_Desc)</Text>
</Control>
<Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="30">
- <Text>$(loc.VerifyRemoveDlg_ClickRemove)</Text>
+ <Text>!(loc.VerifyRemoveDlg_ClickRemove)</Text>
</Control>
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>[DlgTitleFont]$(loc.VerifyRemoveDlg_Header)</Text>
+ <Text>[DlgTitleFont]!(loc.VerifyRemoveDlg_Header)</Text>
</Control>
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
</Dialog>
- <Dialog Id="VerifyRepairDlg" Width="370" Height="270" Title="[ProductName] $(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
- <Control Id="Repair" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_Repair)">
+ <Dialog Id="VBoxVerifyRepairDlg" Width="370" Height="270" Title="[ProductName] !(loc.Setup)" NoMinimize="yes" TrackDiskSpace="yes">
+ <Control Id="Repair" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.ButtonText_Repair)">
<Publish Event="ReinstallMode" Value="ecmus"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="Reinstall" Value="All"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace <> 1]]></Publish>
- <Publish Event="SpawnDialog" Value="OutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
+ <Publish Event="SpawnDialog" Value="VBoxOutOfRbDiskDlg"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND (PROMPTROLLBACKCOST="P" OR NOT PROMPTROLLBACKCOST)]]></Publish>
<Publish Event="EndDialog" Value="Return"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
<Publish Event="EnableRollback" Value="False"><![CDATA[OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 0 AND PROMPTROLLBACKCOST="D"]]></Publish>
- <Publish Event="SpawnDialog" Value="OutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
+ <Publish Event="SpawnDialog" Value="VBoxOutOfDiskDlg"><![CDATA[(OutOfDiskSpace = 1 AND OutOfNoRbDiskSpace = 1) OR (OutOfDiskSpace = 1 AND PROMPTROLLBACKCOST="F")]]></Publish>
</Control>
<!-- Build number text drawn left bottom -->
@@ -865,61 +873,41 @@
<Text>[Version_text] $(var.Property_Version)</Text>
</Control>
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.ButtonText_Cancel)">
+ <Publish Event="SpawnDialog" Value="VBoxCancelDlg">1</Publish>
</Control>
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
- <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="$(loc.ButtonText_Back)">
- <Publish Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.ButtonText_Back)">
+ <Publish Event="NewDialog" Value="VBoxMaintenanceTypeDlg">1</Publish>
</Control>
<Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>$(loc.VerifyRepairDlg_ReadyToBegin)</Text>
+ <Text>!(loc.VerifyRepairDlg_ReadyToBegin)</Text>
</Control>
<Control Id="Text" Type="Text" X="25" Y="70" Width="320" Height="30">
- <Text>$(loc.VerifyRepairDlg_ClickRepair)</Text>
+ <Text>!(loc.VerifyRepairDlg_ClickRepair)</Text>
</Control>
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes">
- <Text>[DlgTitleFont]$(loc.VerifyRepairDlg_Header)</Text>
+ <Text>[DlgTitleFont]!(loc.VerifyRepairDlg_Header)</Text>
</Control>
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
</Dialog>
- <Dialog Id="WaitForCostingDlg" Width="260" Height="85" Title="[ProductName] $(loc.Setup)" NoMinimize="yes">
+ <Dialog Id="VBoxWaitForCostingDlg" Width="260" Height="85" Title="[ProductName] !(loc.Setup)" NoMinimize="yes">
<Control Id="Return" Type="PushButton" X="102" Y="57" Width="56" Height="17" Default="yes" Cancel="yes" Text="[ButtonText_Return]">
<Publish Event="EndDialog" Value="Exit">1</Publish>
</Control>
<Control Id="Text" Type="Text" X="48" Y="15" Width="194" Height="30">
- <Text>$(loc.WaitForCostingDlg_PleaseWait)</Text>
+ <Text>!(loc.WaitForCostingDlg_PleaseWait)</Text>
</Control>
<Control Id="Icon" Type="Icon" X="15" Y="15" Width="24" Height="24" ToolTip="Exclamation icon" FixedSize="yes" IconSize="32" Text="[ExclamationIcon]" />
</Dialog>
- <!-- Dialogs used by the .MSI internally. -->
- <Dialog Id="MsiRMFilesInUse" Width="370" Height="270" Title="[ProductName] $(loc.Setup) Test" KeepModeless="yes">
- <Control Id="OK" Type="PushButton" X="240" Y="243" Width="56" Height="17" Default="yes" Text="$(loc.ButtonText_OK)">
- <Publish Event="EndDialog" Value="Return">1</Publish>
- <Publish Event="RMShutdownAndRestart" Value="0">WixUIRMOption~="UseRM"</Publish>
- </Control>
- <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="$(loc.ButtonText_Cancel)">
- <Publish Event="EndDialog" Value="Exit">1</Publish>
- </Control>
- <Control Id="ShutdownOption" Type="RadioButtonGroup" X="26" Y="190" Width="305" Height="45" Property="WixUIRMOption">
- <RadioButtonGroup Property="WixUIRMOption">
- <RadioButton Value="UseRM" X="0" Y="0" Width="295" Height="16" Text="$(loc.MsiRMFilesInUse_UseRM)" />
- <RadioButton Value="DontUseRM" X="0" Y="20" Width="295" Height="16" Text="$(loc.MsiRMFilesInUse_DontUseRM)" />
- </RadioButtonGroup>
- </Control>
- <Control Id="List" Type="ListBox" X="20" Y="100" Width="330" Height="100" Property="FileInUseProcess" Sunken="yes" TabSkip="yes" />
- <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="[BannerBitmap]" />
- <Control Id="Text" Type="Text" X="20" Y="55" Width="330" Height="45" Text="$(loc.MsiRMFilesInUse_Text)" />
- <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
- <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
- <Control Id="Description" Type="Text" X="20" Y="23" Width="280" Height="20" Transparent="yes" NoPrefix="yes" Text="$(loc.MsiRMFilesInUse_Description)" />
- <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="$(loc.MsiRMFilesInUse_Title)" />
- </Dialog>
+ <!-- Dialog property table. -->
+ <Property Id="ErrorDialog" Value="VBoxFatalErrorDlg"/>
<!-- Define some textstyles used for formatting dialog items. -->
+ <Property Id="DefaultUIFont">DlgFont8</Property>
<TextStyle Id="DlgFont8" FaceName="Tahoma" Size="8" />
<TextStyle Id="DlgFontBold8" FaceName="Tahoma" Size="8" Bold="yes" />
<TextStyle Id="DlgVerdanaBold13" FaceName="Verdana" Size="13" Bold="yes" />
@@ -928,130 +916,130 @@
<!-- The UIText table contains the localized versions of some of the strings used in the user interface.
These strings are not part of any other table. The UIText table is for strings that have no logical place in any other table. -->
- <ProgressText Action="CostFinalize">$(loc.ProgressTextCostFinalize)</ProgressText>
- <ProgressText Action="CostInitialize">$(loc.ProgressTextCostInitialize)</ProgressText>
- <ProgressText Action="FileCost">$(loc.ProgressTextFileCost)</ProgressText>
- <ProgressText Action="InstallValidate">$(loc.ProgressTextInstallValidate)</ProgressText>
- <ProgressText Action="InstallFiles" Template="File: [1], Directory: [9], Size: [6]">$(loc.ProgressTextInstallFiles)</ProgressText>
- <ProgressText Action="InstallAdminPackage" Template="File: [1], Directory: [9], Size: [6]">$(loc.ProgressTextInstallAdminPackage)</ProgressText>
- <ProgressText Action="CreateShortcuts" Template="Shortcut: [1]">$(loc.ProgressTextCreateShortcuts)</ProgressText>
- <ProgressText Action="PublishComponents" Template="Component ID: [1], Qualifier: [2]">$(loc.ProgressTextPublishComponents)</ProgressText>
- <ProgressText Action="PublishFeatures" Template="Feature: [1]">$(loc.ProgressTextPublishFeatures)</ProgressText>
- <ProgressText Action="PublishProduct">$(loc.ProgressTextPublishProduct)</ProgressText>
- <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">$(loc.ProgressTextRegisterClassInfo)</ProgressText>
- <ProgressText Action="RegisterExtensionInfo" Template="Extension: [1]">$(loc.ProgressTextRegisterExtensionInfo)</ProgressText>
- <ProgressText Action="RegisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">$(loc.ProgressTextRegisterMIMEInfo)</ProgressText>
- <ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">$(loc.ProgressTextRegisterProgIdInfo)</ProgressText>
- <ProgressText Action="AllocateRegistrySpace" Template="Free space: [1]">$(loc.ProgressTextAllocateRegistrySpace)</ProgressText>
- <ProgressText Action="AppSearch" Template="Property: [1], Signature: [2]">$(loc.ProgressTextAppSearch)</ProgressText>
- <ProgressText Action="BindImage" Template="File: [1]">$(loc.ProgressTextBindImage)</ProgressText>
- <ProgressText Action="CCPSearch">$(loc.ProgressTextCCPSearch)</ProgressText>
- <ProgressText Action="CreateFolders" Template="Folder: [1]">$(loc.ProgressTextCreateFolders)</ProgressText>
- <ProgressText Action="DeleteServices" Template="Service: [1]">$(loc.ProgressTextDeleteServices)</ProgressText>
- <ProgressText Action="DuplicateFiles" Template="File: [1], Directory: [9], Size: [6]">$(loc.ProgressTextDuplicateFiles)</ProgressText>
- <ProgressText Action="FindRelatedProducts" Template="Found application: [1]">$(loc.ProgressTextFindRelatedProducts)</ProgressText>
- <ProgressText Action="InstallODBC">$(loc.ProgressTextInstallODBC)</ProgressText>
- <ProgressText Action="InstallServices" Template="Service: [2]">$(loc.ProgressTextInstallServices)</ProgressText>
- <ProgressText Action="LaunchConditions">$(loc.ProgressTextLaunchConditions)</ProgressText>
- <ProgressText Action="MigrateFeatureStates" Template="Application: [1]">$(loc.ProgressTextMigrateFeatureStates)</ProgressText>
- <ProgressText Action="MoveFiles" Template="File: [1], Directory: [9], Size: [6]">$(loc.ProgressTextMoveFiles)</ProgressText>
- <ProgressText Action="PatchFiles" Template="File: [1], Directory: [2], Size: [3]">$(loc.ProgressTextPatchFiles)</ProgressText>
- <ProgressText Action="ProcessComponents">$(loc.ProgressTextProcessComponents)</ProgressText>
- <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">$(loc.ProgressTextRegisterComPlus)</ProgressText>
- <ProgressText Action="RegisterFonts" Template="Font: [1]">$(loc.ProgressTextRegisterFonts)</ProgressText>
- <ProgressText Action="RegisterProduct" Template="[1]">$(loc.ProgressTextRegisterProduct)</ProgressText>
- <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">$(loc.ProgressTextRegisterTypeLibraries)</ProgressText>
- <ProgressText Action="RegisterUser" Template="[1]">$(loc.ProgressTextRegisterUser)</ProgressText>
- <ProgressText Action="RemoveDuplicateFiles" Template="File: [1], Directory: [9]">$(loc.ProgressTextRemoveDuplicateFiles)</ProgressText>
- <ProgressText Action="RemoveEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">$(loc.ProgressTextRemoveEnvironmentStrings)</ProgressText>
- <ProgressText Action="RemoveExistingProducts" Template="Application: [1], Command line: [2]">$(loc.ProgressTextRemoveExistingProducts)</ProgressText>
- <ProgressText Action="RemoveFiles" Template="File: [1], Directory: [9]">$(loc.ProgressTextRemoveFiles)</ProgressText>
- <ProgressText Action="RemoveFolders" Template="Folder: [1]">$(loc.ProgressTextRemoveFolders)</ProgressText>
- <ProgressText Action="RemoveIniValues" Template="File: [1], Section: [2], Key: [3], Value: [4]">$(loc.ProgressTextRemoveIniValues)</ProgressText>
- <ProgressText Action="RemoveODBC">$(loc.ProgressTextRemoveODBC)</ProgressText>
- <ProgressText Action="RemoveRegistryValues" Template="Key: [1], Name: [2]">$(loc.ProgressTextRemoveRegistryValues)</ProgressText>
- <ProgressText Action="RemoveShortcuts" Template="Shortcut: [1]">$(loc.ProgressTextRemoveShortcuts)</ProgressText>
- <ProgressText Action="RMCCPSearch">$(loc.ProgressTextRMCCPSearch)</ProgressText>
- <ProgressText Action="SelfRegModules" Template="File: [1], Folder: [2]">$(loc.ProgressTextSelfRegModules)</ProgressText>
- <ProgressText Action="SelfUnregModules" Template="File: [1], Folder: [2]">$(loc.ProgressTextSelfUnregModules)</ProgressText>
- <ProgressText Action="SetODBCFolders">$(loc.ProgressTextSetODBCFolders)</ProgressText>
- <ProgressText Action="StartServices" Template="Service: [1]">$(loc.ProgressTextStartServices)</ProgressText>
- <ProgressText Action="StopServices" Template="Service: [1]">$(loc.ProgressTextStopServices)</ProgressText>
- <ProgressText Action="UnpublishComponents" Template="Component ID: [1], Qualifier: [2]">$(loc.ProgressTextUnpublishComponents)</ProgressText>
- <ProgressText Action="UnpublishFeatures" Template="Feature: [1]">$(loc.ProgressTextUnpublishFeatures)</ProgressText>
- <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">$(loc.ProgressTextUnregisterClassInfo)</ProgressText>
- <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">$(loc.ProgressTextUnregisterComPlus)</ProgressText>
- <ProgressText Action="UnregisterExtensionInfo" Template="Extension: [1]">$(loc.ProgressTextUnregisterExtensionInfo)</ProgressText>
- <ProgressText Action="UnregisterFonts" Template="Font: [1]">$(loc.ProgressTextUnregisterFonts)</ProgressText>
- <ProgressText Action="UnregisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">$(loc.ProgressTextUnregisterMIMEInfo)</ProgressText>
- <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">$(loc.ProgressTextUnregisterProgIdInfo)</ProgressText>
- <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">$(loc.ProgressTextUnregisterTypeLibraries)</ProgressText>
- <ProgressText Action="WriteEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">$(loc.ProgressTextWriteEnvironmentStrings)</ProgressText>
- <ProgressText Action="WriteIniValues" Template="File: [1], Section: [2], Key: [3], Value: [4]">$(loc.ProgressTextWriteIniValues)</ProgressText>
- <ProgressText Action="WriteRegistryValues" Template="Key: [1], Name: [2], Value: [3]">$(loc.ProgressTextWriteRegistryValues)</ProgressText>
- <ProgressText Action="Advertise">$(loc.ProgressTextAdvertise)</ProgressText>
- <ProgressText Action="GenerateScript" Template="[1]">$(loc.ProgressTextGenerateScript)</ProgressText>
- <ProgressText Action="InstallSFPCatalogFile" Template="File: [1], Dependencies: [2]">$(loc.ProgressTextInstallSFPCatalogFile)</ProgressText>
- <ProgressText Action="MsiPublishAssemblies" Template="Application Context:[1], Assembly Name:[2]">$(loc.ProgressTextMsiPublishAssemblies)</ProgressText>
- <ProgressText Action="MsiUnpublishAssemblies" Template="Application Context:[1], Assembly Name:[2]">$(loc.ProgressTextMsiUnpublishAssemblies)</ProgressText>
- <ProgressText Action="Rollback" Template="[1]">$(loc.ProgressTextRollback)</ProgressText>
- <ProgressText Action="RollbackCleanup" Template="File: [1]">$(loc.ProgressTextRollbackCleanup)</ProgressText>
- <ProgressText Action="UnmoveFiles" Template="File: [1], Directory: [9]">$(loc.ProgressTextUnmoveFiles)</ProgressText>
- <ProgressText Action="UnpublishProduct">$(loc.ProgressTextUnpublishProduct)</ProgressText>
-
- <UIText Id="bytes">$(loc.UITextbytes)</UIText>
- <UIText Id="GB">$(loc.UITextGB)</UIText>
- <UIText Id="KB">$(loc.UITextKB)</UIText>
- <UIText Id="MB">$(loc.UITextMB)</UIText>
+ <ProgressText Action="CostFinalize">!(loc.ProgressTextCostFinalize)</ProgressText>
+ <ProgressText Action="CostInitialize">!(loc.ProgressTextCostInitialize)</ProgressText>
+ <ProgressText Action="FileCost">!(loc.ProgressTextFileCost)</ProgressText>
+ <ProgressText Action="InstallValidate">!(loc.ProgressTextInstallValidate)</ProgressText>
+ <ProgressText Action="InstallFiles" Template="File: [1], Directory: [9], Size: [6]">!(loc.ProgressTextInstallFiles)</ProgressText>
+ <ProgressText Action="InstallAdminPackage" Template="File: [1], Directory: [9], Size: [6]">!(loc.ProgressTextInstallAdminPackage)</ProgressText>
+ <ProgressText Action="CreateShortcuts" Template="Shortcut: [1]">!(loc.ProgressTextCreateShortcuts)</ProgressText>
+ <ProgressText Action="PublishComponents" Template="Component ID: [1], Qualifier: [2]">!(loc.ProgressTextPublishComponents)</ProgressText>
+ <ProgressText Action="PublishFeatures" Template="Feature: [1]">!(loc.ProgressTextPublishFeatures)</ProgressText>
+ <ProgressText Action="PublishProduct">!(loc.ProgressTextPublishProduct)</ProgressText>
+ <ProgressText Action="RegisterClassInfo" Template="Class Id: [1]">!(loc.ProgressTextRegisterClassInfo)</ProgressText>
+ <ProgressText Action="RegisterExtensionInfo" Template="Extension: [1]">!(loc.ProgressTextRegisterExtensionInfo)</ProgressText>
+ <ProgressText Action="RegisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">!(loc.ProgressTextRegisterMIMEInfo)</ProgressText>
+ <ProgressText Action="RegisterProgIdInfo" Template="ProgId: [1]">!(loc.ProgressTextRegisterProgIdInfo)</ProgressText>
+ <ProgressText Action="AllocateRegistrySpace" Template="Free space: [1]">!(loc.ProgressTextAllocateRegistrySpace)</ProgressText>
+ <ProgressText Action="AppSearch" Template="Property: [1], Signature: [2]">!(loc.ProgressTextAppSearch)</ProgressText>
+ <ProgressText Action="BindImage" Template="File: [1]">!(loc.ProgressTextBindImage)</ProgressText>
+ <ProgressText Action="CCPSearch">!(loc.ProgressTextCCPSearch)</ProgressText>
+ <ProgressText Action="CreateFolders" Template="Folder: [1]">!(loc.ProgressTextCreateFolders)</ProgressText>
+ <ProgressText Action="DeleteServices" Template="Service: [1]">!(loc.ProgressTextDeleteServices)</ProgressText>
+ <ProgressText Action="DuplicateFiles" Template="File: [1], Directory: [9], Size: [6]">!(loc.ProgressTextDuplicateFiles)</ProgressText>
+ <ProgressText Action="FindRelatedProducts" Template="Found application: [1]">!(loc.ProgressTextFindRelatedProducts)</ProgressText>
+ <ProgressText Action="InstallODBC">!(loc.ProgressTextInstallODBC)</ProgressText>
+ <ProgressText Action="InstallServices" Template="Service: [2]">!(loc.ProgressTextInstallServices)</ProgressText>
+ <ProgressText Action="LaunchConditions">!(loc.ProgressTextLaunchConditions)</ProgressText>
+ <ProgressText Action="MigrateFeatureStates" Template="Application: [1]">!(loc.ProgressTextMigrateFeatureStates)</ProgressText>
+ <ProgressText Action="MoveFiles" Template="File: [1], Directory: [9], Size: [6]">!(loc.ProgressTextMoveFiles)</ProgressText>
+ <ProgressText Action="PatchFiles" Template="File: [1], Directory: [2], Size: [3]">!(loc.ProgressTextPatchFiles)</ProgressText>
+ <ProgressText Action="ProcessComponents">!(loc.ProgressTextProcessComponents)</ProgressText>
+ <ProgressText Action="RegisterComPlus" Template="AppId: [1]{{, AppType: [2], Users: [3], RSN: [4]}}">!(loc.ProgressTextRegisterComPlus)</ProgressText>
+ <ProgressText Action="RegisterFonts" Template="Font: [1]">!(loc.ProgressTextRegisterFonts)</ProgressText>
+ <ProgressText Action="RegisterProduct" Template="[1]">!(loc.ProgressTextRegisterProduct)</ProgressText>
+ <ProgressText Action="RegisterTypeLibraries" Template="LibID: [1]">!(loc.ProgressTextRegisterTypeLibraries)</ProgressText>
+ <ProgressText Action="RegisterUser" Template="[1]">!(loc.ProgressTextRegisterUser)</ProgressText>
+ <ProgressText Action="RemoveDuplicateFiles" Template="File: [1], Directory: [9]">!(loc.ProgressTextRemoveDuplicateFiles)</ProgressText>
+ <ProgressText Action="RemoveEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">!(loc.ProgressTextRemoveEnvironmentStrings)</ProgressText>
+ <ProgressText Action="RemoveExistingProducts" Template="Application: [1], Command line: [2]">!(loc.ProgressTextRemoveExistingProducts)</ProgressText>
+ <ProgressText Action="RemoveFiles" Template="File: [1], Directory: [9]">!(loc.ProgressTextRemoveFiles)</ProgressText>
+ <ProgressText Action="RemoveFolders" Template="Folder: [1]">!(loc.ProgressTextRemoveFolders)</ProgressText>
+ <ProgressText Action="RemoveIniValues" Template="File: [1], Section: [2], Key: [3], Value: [4]">!(loc.ProgressTextRemoveIniValues)</ProgressText>
+ <ProgressText Action="RemoveODBC">!(loc.ProgressTextRemoveODBC)</ProgressText>
+ <ProgressText Action="RemoveRegistryValues" Template="Key: [1], Name: [2]">!(loc.ProgressTextRemoveRegistryValues)</ProgressText>
+ <ProgressText Action="RemoveShortcuts" Template="Shortcut: [1]">!(loc.ProgressTextRemoveShortcuts)</ProgressText>
+ <ProgressText Action="RMCCPSearch">!(loc.ProgressTextRMCCPSearch)</ProgressText>
+ <ProgressText Action="SelfRegModules" Template="File: [1], Folder: [2]">!(loc.ProgressTextSelfRegModules)</ProgressText>
+ <ProgressText Action="SelfUnregModules" Template="File: [1], Folder: [2]">!(loc.ProgressTextSelfUnregModules)</ProgressText>
+ <ProgressText Action="SetODBCFolders">!(loc.ProgressTextSetODBCFolders)</ProgressText>
+ <ProgressText Action="StartServices" Template="Service: [1]">!(loc.ProgressTextStartServices)</ProgressText>
+ <ProgressText Action="StopServices" Template="Service: [1]">!(loc.ProgressTextStopServices)</ProgressText>
+ <ProgressText Action="UnpublishComponents" Template="Component ID: [1], Qualifier: [2]">!(loc.ProgressTextUnpublishComponents)</ProgressText>
+ <ProgressText Action="UnpublishFeatures" Template="Feature: [1]">!(loc.ProgressTextUnpublishFeatures)</ProgressText>
+ <ProgressText Action="UnregisterClassInfo" Template="Class Id: [1]">!(loc.ProgressTextUnregisterClassInfo)</ProgressText>
+ <ProgressText Action="UnregisterComPlus" Template="AppId: [1]{{, AppType: [2]}}">!(loc.ProgressTextUnregisterComPlus)</ProgressText>
+ <ProgressText Action="UnregisterExtensionInfo" Template="Extension: [1]">!(loc.ProgressTextUnregisterExtensionInfo)</ProgressText>
+ <ProgressText Action="UnregisterFonts" Template="Font: [1]">!(loc.ProgressTextUnregisterFonts)</ProgressText>
+ <ProgressText Action="UnregisterMIMEInfo" Template="MIME Content Type: [1], Extension: [2]">!(loc.ProgressTextUnregisterMIMEInfo)</ProgressText>
+ <ProgressText Action="UnregisterProgIdInfo" Template="ProgId: [1]">!(loc.ProgressTextUnregisterProgIdInfo)</ProgressText>
+ <ProgressText Action="UnregisterTypeLibraries" Template="LibID: [1]">!(loc.ProgressTextUnregisterTypeLibraries)</ProgressText>
+ <ProgressText Action="WriteEnvironmentStrings" Template="Name: [1], Value: [2], Action [3]">!(loc.ProgressTextWriteEnvironmentStrings)</ProgressText>
+ <ProgressText Action="WriteIniValues" Template="File: [1], Section: [2], Key: [3], Value: [4]">!(loc.ProgressTextWriteIniValues)</ProgressText>
+ <ProgressText Action="WriteRegistryValues" Template="Key: [1], Name: [2], Value: [3]">!(loc.ProgressTextWriteRegistryValues)</ProgressText>
+ <ProgressText Action="Advertise">!(loc.ProgressTextAdvertise)</ProgressText>
+ <ProgressText Action="GenerateScript" Template="[1]">!(loc.ProgressTextGenerateScript)</ProgressText>
+ <ProgressText Action="InstallSFPCatalogFile" Template="File: [1], Dependencies: [2]">!(loc.ProgressTextInstallSFPCatalogFile)</ProgressText>
+ <ProgressText Action="MsiPublishAssemblies" Template="Application Context:[1], Assembly Name:[2]">!(loc.ProgressTextMsiPublishAssemblies)</ProgressText>
+ <ProgressText Action="MsiUnpublishAssemblies" Template="Application Context:[1], Assembly Name:[2]">!(loc.ProgressTextMsiUnpublishAssemblies)</ProgressText>
+ <ProgressText Action="Rollback" Template="[1]">!(loc.ProgressTextRollback)</ProgressText>
+ <ProgressText Action="RollbackCleanup" Template="File: [1]">!(loc.ProgressTextRollbackCleanup)</ProgressText>
+ <ProgressText Action="UnmoveFiles" Template="File: [1], Directory: [9]">!(loc.ProgressTextUnmoveFiles)</ProgressText>
+ <ProgressText Action="UnpublishProduct">!(loc.ProgressTextUnpublishProduct)</ProgressText>
+
+ <UIText Id="bytes">!(loc.UITextbytes)</UIText>
+ <UIText Id="GB">!(loc.UITextGB)</UIText>
+ <UIText Id="KB">!(loc.UITextKB)</UIText>
+ <UIText Id="MB">!(loc.UITextMB)</UIText>
<UIText Id="AbsentPath"><![CDATA[-]]></UIText>
- <UIText Id="MenuAbsent">$(loc.UITextMenuAbsent)</UIText>
- <UIText Id="MenuAdvertise">$(loc.UITextMenuAdvertise)</UIText>
- <UIText Id="MenuAllCD">$(loc.UITextMenuAllCD)</UIText>
- <UIText Id="MenuAllLocal">$(loc.UITextMenuAllLocal)</UIText>
- <UIText Id="MenuAllNetwork">$(loc.UITextMenuAllNetwork)</UIText>
- <UIText Id="MenuCD">$(loc.UITextMenuCD)</UIText>
- <UIText Id="MenuLocal">$(loc.UITextMenuLocal)</UIText>
- <UIText Id="MenuNetwork">$(loc.UITextMenuNetwork)</UIText>
- <UIText Id="ScriptInProgress">$(loc.UITextScriptInProgress)</UIText>
- <UIText Id="SelAbsentAbsent">$(loc.UITextSelAbsentAbsent)</UIText>
- <UIText Id="SelAbsentAdvertise">$(loc.UITextSelAbsentAdvertise)</UIText>
- <UIText Id="SelAbsentCD">$(loc.UITextSelAbsentCD)</UIText>
- <UIText Id="SelAbsentLocal">$(loc.UITextSelAbsentLocal)</UIText>
- <UIText Id="SelAbsentNetwork">$(loc.UITextSelAbsentNetwork)</UIText>
- <UIText Id="SelAdvertiseAbsent">$(loc.UITextSelAdvertiseAbsent)</UIText>
- <UIText Id="SelAdvertiseAdvertise">$(loc.UITextSelAdvertiseAdvertise)</UIText>
- <UIText Id="SelAdvertiseCD">$(loc.UITextSelAdvertiseCD)</UIText>
- <UIText Id="SelAdvertiseLocal">$(loc.UITextSelAdvertiseLocal)</UIText>
- <UIText Id="SelAdvertiseNetwork">$(loc.UITextSelAdvertiseNetwork)</UIText>
- <UIText Id="SelCDAbsent">$(loc.UITextSelCDAbsent)</UIText>
- <UIText Id="SelCDAdvertise">$(loc.UITextSelCDAdvertise)</UIText>
- <UIText Id="SelCDCD">$(loc.UITextSelCDCD)</UIText>
- <UIText Id="SelCDLocal">$(loc.UITextSelCDLocal)</UIText>
- <UIText Id="SelChildCostNeg">$(loc.UITextSelChildCostNeg)</UIText>
- <UIText Id="SelChildCostPos">$(loc.UITextSelChildCostPos)</UIText>
- <UIText Id="SelCostPending">$(loc.UITextSelCostPending)</UIText>
- <UIText Id="SelLocalAbsent">$(loc.UITextSelLocalAbsent)</UIText>
- <UIText Id="SelLocalAdvertise">$(loc.UITextSelLocalAdvertise)</UIText>
- <UIText Id="SelLocalCD">$(loc.UITextSelLocalCD)</UIText>
- <UIText Id="SelLocalLocal">$(loc.UITextSelLocalLocal)</UIText>
- <UIText Id="SelLocalNetwork">$(loc.UITextSelLocalNetwork)</UIText>
- <UIText Id="SelNetworkAbsent">$(loc.UITextSelNetworkAbsent)</UIText>
- <UIText Id="SelNetworkAdvertise">$(loc.UITextSelNetworkAdvertise)</UIText>
- <UIText Id="SelNetworkLocal">$(loc.UITextSelNetworkLocal)</UIText>
- <UIText Id="SelNetworkNetwork">$(loc.UITextSelNetworkNetwork)</UIText>
- <UIText Id="SelParentCostNegNeg">$(loc.UITextSelParentCostNegNeg)</UIText>
- <UIText Id="SelParentCostNegPos">$(loc.UITextSelParentCostNegPos)</UIText>
- <UIText Id="SelParentCostPosNeg">$(loc.UITextSelParentCostPosNeg)</UIText>
- <UIText Id="SelParentCostPosPos">$(loc.UITextSelParentCostPosPos)</UIText>
- <UIText Id="TimeRemaining">$(loc.UITextTimeRemaining)</UIText>
- <UIText Id="VolumeCostAvailable">$(loc.UITextVolumeCostAvailable)</UIText>
- <UIText Id="VolumeCostDifference">$(loc.UITextVolumeCostDifference)</UIText>
- <UIText Id="VolumeCostRequired">$(loc.UITextVolumeCostRequired)</UIText>
- <UIText Id="VolumeCostSize">$(loc.UITextVolumeCostSize)</UIText>
- <UIText Id="VolumeCostVolume">$(loc.UITextVolumeCostVolume)</UIText>
+ <UIText Id="MenuAbsent">!(loc.UITextMenuAbsent)</UIText>
+ <UIText Id="MenuAdvertise">!(loc.UITextMenuAdvertise)</UIText>
+ <UIText Id="MenuAllCD">!(loc.UITextMenuAllCD)</UIText>
+ <UIText Id="MenuAllLocal">!(loc.UITextMenuAllLocal)</UIText>
+ <UIText Id="MenuAllNetwork">!(loc.UITextMenuAllNetwork)</UIText>
+ <UIText Id="MenuCD">!(loc.UITextMenuCD)</UIText>
+ <UIText Id="MenuLocal">!(loc.UITextMenuLocal)</UIText>
+ <UIText Id="MenuNetwork">!(loc.UITextMenuNetwork)</UIText>
+ <UIText Id="ScriptInProgress">!(loc.UITextScriptInProgress)</UIText>
+ <UIText Id="SelAbsentAbsent">!(loc.UITextSelAbsentAbsent)</UIText>
+ <UIText Id="SelAbsentAdvertise">!(loc.UITextSelAbsentAdvertise)</UIText>
+ <UIText Id="SelAbsentCD">!(loc.UITextSelAbsentCD)</UIText>
+ <UIText Id="SelAbsentLocal">!(loc.UITextSelAbsentLocal)</UIText>
+ <UIText Id="SelAbsentNetwork">!(loc.UITextSelAbsentNetwork)</UIText>
+ <UIText Id="SelAdvertiseAbsent">!(loc.UITextSelAdvertiseAbsent)</UIText>
+ <UIText Id="SelAdvertiseAdvertise">!(loc.UITextSelAdvertiseAdvertise)</UIText>
+ <UIText Id="SelAdvertiseCD">!(loc.UITextSelAdvertiseCD)</UIText>
+ <UIText Id="SelAdvertiseLocal">!(loc.UITextSelAdvertiseLocal)</UIText>
+ <UIText Id="SelAdvertiseNetwork">!(loc.UITextSelAdvertiseNetwork)</UIText>
+ <UIText Id="SelCDAbsent">!(loc.UITextSelCDAbsent)</UIText>
+ <UIText Id="SelCDAdvertise">!(loc.UITextSelCDAdvertise)</UIText>
+ <UIText Id="SelCDCD">!(loc.UITextSelCDCD)</UIText>
+ <UIText Id="SelCDLocal">!(loc.UITextSelCDLocal)</UIText>
+ <UIText Id="SelChildCostNeg">!(loc.UITextSelChildCostNeg)</UIText>
+ <UIText Id="SelChildCostPos">!(loc.UITextSelChildCostPos)</UIText>
+ <UIText Id="SelCostPending">!(loc.UITextSelCostPending)</UIText>
+ <UIText Id="SelLocalAbsent">!(loc.UITextSelLocalAbsent)</UIText>
+ <UIText Id="SelLocalAdvertise">!(loc.UITextSelLocalAdvertise)</UIText>
+ <UIText Id="SelLocalCD">!(loc.UITextSelLocalCD)</UIText>
+ <UIText Id="SelLocalLocal">!(loc.UITextSelLocalLocal)</UIText>
+ <UIText Id="SelLocalNetwork">!(loc.UITextSelLocalNetwork)</UIText>
+ <UIText Id="SelNetworkAbsent">!(loc.UITextSelNetworkAbsent)</UIText>
+ <UIText Id="SelNetworkAdvertise">!(loc.UITextSelNetworkAdvertise)</UIText>
+ <UIText Id="SelNetworkLocal">!(loc.UITextSelNetworkLocal)</UIText>
+ <UIText Id="SelNetworkNetwork">!(loc.UITextSelNetworkNetwork)</UIText>
+ <UIText Id="SelParentCostNegNeg">!(loc.UITextSelParentCostNegNeg)</UIText>
+ <UIText Id="SelParentCostNegPos">!(loc.UITextSelParentCostNegPos)</UIText>
+ <UIText Id="SelParentCostPosNeg">!(loc.UITextSelParentCostPosNeg)</UIText>
+ <UIText Id="SelParentCostPosPos">!(loc.UITextSelParentCostPosPos)</UIText>
+ <UIText Id="TimeRemaining">!(loc.UITextTimeRemaining)</UIText>
+ <UIText Id="VolumeCostAvailable">!(loc.UITextVolumeCostAvailable)</UIText>
+ <UIText Id="VolumeCostDifference">!(loc.UITextVolumeCostDifference)</UIText>
+ <UIText Id="VolumeCostRequired">!(loc.UITextVolumeCostRequired)</UIText>
+ <UIText Id="VolumeCostSize">!(loc.UITextVolumeCostSize)</UIText>
+ <UIText Id="VolumeCostVolume">!(loc.UITextVolumeCostVolume)</UIText>
<!-- Own error messages -->
- <Error Id="25001">$(loc.Error25001)</Error>
+ <Error Id="25001">!(loc.Error25001)</Error>
<!-- The text used in front of the build number -->
<Property Id="Version_text">Version</Property>
@@ -1062,46 +1050,55 @@
<!-- This property preselects the "Don't agree" radio button in the license page -->
<Property Id="IAgree">No</Property>
- <!-- Aliases for the icon files -->
- <Property Id="RemoveIcon">removico</Property>
- <Property Id="RepairIcon">repairic</Property>
-
<!-- Icon files used for the UI -->
- <Binary Id="removico" src="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Remove.ico" />
- <Binary Id="repairic" src="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Repair.ico" />
- <Binary Id="folderupico" src="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Up.ico" />
- <Binary Id="foldernewico" src="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\New.ico" />
+ <Binary Id="infoico" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Info.ico" />
+ <Binary Id="exclico" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Exclamation.ico" />
+ <Binary Id="folderupico" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Up.ico" />
+ <Binary Id="foldernewico" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\New.ico" />
+ <Binary Id="removico" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Remove.ico" />
+ <Binary Id="repairic" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Repair.ico" />
<!-- Graphic files used for the UI -->
<!-- See: http://wix.sourceforge.net/manual-wix3/WixUI_customizations.htm -->
- <Binary Id="bannerjpg" src="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Banner.jpg" />
- <Binary Id="dlgjpg" src="$(env.VBOX_BRAND_WIN_INST_DLGJPG)" />
+ <Binary Id="bannerjpg" SourceFile="$(env.VBOX_PATH_WIN_INST_SRC)\Binary\Banner.jpg" />
+ <Binary Id="dlgjpg" SourceFile="$(env.VBOX_BRAND_WIN_INST_DLGJPG)" />
<!-- Aliases for the graphic files -->
+ <Property Id="InfoIcon">infoico</Property>
+ <Property Id="ExclamationIcon">exclico</Property>
+ <Property Id="RemoveIcon">removico</Property>
+ <Property Id="RepairIcon">repairic</Property>
<Property Id="DialogBitmap">dlgjpg</Property>
<Property Id="BannerBitmap">bannerjpg</Property>
<Property Id="FolderUp">folderupico</Property>
<Property Id="FolderNew">foldernewico</Property>
- <Binary Id="wixca" src="wixca.dll"/>
-
<!-- This defines the order in which the GUI panels will be shown to the user -->
<InstallUISequence>
- <Custom Action="OriginalTargetDir" After="FileCost"><![CDATA[(NOT INSTALLDIR) AND (NOT EXISTINGINSTALLDIR)]]></Custom>
- <Custom Action="DefaultTargetDir" After="FileCost"><![CDATA[NOT Installed AND (NOT INSTALLDIR) AND EXISTINGINSTALLDIR]]></Custom>
+ <Custom Action="ca_OriginalTargetDir" After="FileCost"><![CDATA[(NOT INSTALLDIR) AND (NOT EXISTINGINSTALLDIR)]]></Custom>
+ <Custom Action="ca_DefaultTargetDir" After="FileCost"><![CDATA[NOT Installed AND (NOT INSTALLDIR) AND EXISTINGINSTALLDIR]]></Custom>
<FindRelatedProducts Suppress="no">1</FindRelatedProducts>
- <Show Dialog="FatalErrorDlg" OnExit="error" />
- <Show Dialog="UserExitDlg" OnExit="cancel" />
- <Show Dialog="PrepareDlg" After="LaunchConditions" />
- <Show Dialog="WelcomeDlg" After="MigrateFeatureStates">NOT Installed</Show>
- <Show Dialog="ResumeDlg" After="WelcomeDlg">Installed AND (RESUME OR Preselected)</Show>
- <Show Dialog="MaintenanceWelcomeDlg" After="ResumeDlg">Installed AND (NOT RESUME) AND (NOT Preselected)</Show>
- <Show Dialog="ExitDlg" OnExit="success">1</Show>
- <Show Dialog="ProgressDlg" After="MaintenanceWelcomeDlg" />
+ <Show Dialog="VBoxFatalErrorDlg" OnExit="error" />
+ <Show Dialog="VBoxUserExitDlg" OnExit="cancel" />
+ <Show Dialog="VBoxPrepareDlg" After="LaunchConditions" />
+ <Show Dialog="VBoxWelcomeDlg" After="MigrateFeatureStates">NOT Installed</Show>
+ <Show Dialog="VBoxResumeDlg" After="VBoxWelcomeDlg">Installed AND (RESUME OR Preselected)</Show>
+ <Show Dialog="VBoxMaintenanceWelcomeDlg" After="VBoxResumeDlg">Installed AND (NOT RESUME) AND (NOT Preselected)</Show>
+ <Show Dialog="VBoxExitDlg" OnExit="success">1</Show>
+ <Show Dialog="VBoxProgressDlg" After="VBoxMaintenanceWelcomeDlg" />
</InstallUISequence>
+
+ <!-- The AdminUISequence table lists actions that the installer calls in sequence when the top-level ADMIN
+ action is executed and the internal user interface level is set to full UI or reduced UI. The installer
+ skips the actions in this table if the user interface level is set to basic UI or no UI. -->
+ <AdminUISequence>
+ <Show Dialog="VBoxFatalErrorDlg" OnExit="error" />
+ <Show Dialog="VBoxUserExitDlg" OnExit="cancel" />
+ <Show Dialog="VBoxExitDlg" OnExit="success" />
+ </AdminUISequence>
</UI>
</Include>
diff --git a/src/VBox/Installer/win/VBoxKey.wxi b/src/VBox/Installer/win/VBoxKey.wxi
index e77a25590..6c7a503e5 100644
--- a/src/VBox/Installer/win/VBoxKey.wxi
+++ b/src/VBox/Installer/win/VBoxKey.wxi
@@ -1,5 +1,5 @@
<Include>
- <Registry Root="HKLM" Key="$(var.Property_RegKey)" Name="Version" Value="%VER%" Type="string" />
- <Registry Root="HKLM" Key="$(var.Property_RegKey)" Name="VersionExt" Value="%VER_EXT%" Type="string" />
- <Registry Root="HKLM" Key="$(var.Property_RegKey)" Name="InstallDir" Value="[INSTALLDIR]" Type="string" />
+ <RegistryValue Root="HKLM" Key="$(var.Property_RegKey)" Name="Version" Value="%VER%" Type="string" />
+ <RegistryValue Root="HKLM" Key="$(var.Property_RegKey)" Name="VersionExt" Value="%VER_EXT%" Type="string" />
+ <RegistryValue Root="HKLM" Key="$(var.Property_RegKey)" Name="InstallDir" Value="[INSTALLDIR]" Type="string" />
</Include>
diff --git a/src/VBox/Installer/win/VirtualBox.wxs b/src/VBox/Installer/win/VirtualBox.wxs
index a52f4310e..758ac52bb 100644
--- a/src/VBox/Installer/win/VirtualBox.wxs
+++ b/src/VBox/Installer/win/VirtualBox.wxs
@@ -13,7 +13,8 @@
hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-->
-<?define Property_RegKey ="Software\$(env.VBOX_VENDOR_SHORT)\VirtualBox" ?>
+<?define Property_RegKey = "Software\$(env.VBOX_VENDOR_SHORT)\VirtualBox" ?>
+<?define Property_RegKeyInstall = "Software\$(env.VBOX_VENDOR_SHORT)\VirtualBox\Install" ?>
<?define Property_Version = "$(env.VBOX_VERSION_STRING_RAW)" ?>
<?define Property_VersionExt = "$(env.VBOX_VERSION_STRING)" ?>
<?define Property_Upgrade = "yes" ?>
@@ -31,7 +32,7 @@
<?else ?>
<?define Property_ProgramFiles = "ProgramFilesFolder" ?>
- <?define Property_Platform = "Intel" ?>
+ <?define Property_Platform = "x86" ?>
<?define Property_Win64 = "no" ?>
<?if $(env.VBOX_SIGNING_MODE) != none ?>
@@ -49,7 +50,8 @@
<?define Property_DiskIdCommon = "1" ?>
<?endif ?>
-<Wix xmlns="http://schemas.microsoft.com/wix/2003/01/wi">
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
+ xmlns:difxapp="http://schemas.microsoft.com/wix/DifxAppExtension">
<!-- Note: GUIDs in WiX *must* be uppercase! -->
<!-- Always include an upgrade ID or otherwise upgrade installation will not be possible. When doing
@@ -64,23 +66,23 @@
<!-- Old product ID: <Product Id="B59FE77B-738F-4f1c-AB48-3104895AF676"
Old upgrade code of innotek: UpgradeCode="F5FFAEBF-97AE-4038-8F91-4DE719456127" -->
- <Product Id="????????-????-????-????-????????????"
+ <Product Id="*"
UpgradeCode="C4BAD770-BFE8-4D2C-A592-693028A7215B"
Name="$(env.VBOX_PRODUCT) $(env.VBOX_VERSION_STRING)"
- Language="$(loc.LANG)"
+ Language="!(loc.LANG)"
Codepage="1252"
Version="$(var.Property_Version)"
Manufacturer="$(env.VBOX_VENDOR)">
<!-- Package GUIDs must be different for each package. The "???" directs WiX to create one. -->
- <Package Id="????????-????-????-????-????????????" Keywords="Installer"
+ <Package Id="*" Keywords="Installer"
Description="$(env.VBOX_PRODUCT) $(var.Property_VersionExt) installation package"
Comments="$(env.VBOX_PRODUCT) installation package"
Manufacturer="$(env.VBOX_VENDOR)"
InstallerVersion="200"
Compressed="yes"
InstallPrivileges="elevated"
- Platforms="$(var.Property_Platform)"/>
+ Platform="$(var.Property_Platform)"/>
<!-- *************************** Upgrade packages only ******************************* -->
<!-- Minimum and Maximum specify the range of versions we are supposed to update with this upgrade.
@@ -117,91 +119,97 @@
<!-- Make sure installation will not start on anything other but the NT family -->
<?if $(env.BUILD_TARGET_ARCH) = "amd64" ?>
- <Condition Message="$(loc.Only64Bit)">
+ <Condition Message="!(loc.Only64Bit)">
VersionNT64
</Condition>
<?else ?>
- <Condition Message="$(loc.Only32Bit)">
+ <Condition Message="!(loc.Only32Bit)">
NOT VersionNT64
</Condition>
- <Condition Message="$(loc.WrongOS)">
+ <Condition Message="!(loc.WrongOS)">
NOT VersionNT=500 AND NOT Version9X AND NOT VersionNT64
</Condition>
<?endif ?>
- <Condition Message="$(loc.NeedAdmin)">
+ <Condition Message="!(loc.NeedAdmin)">
Privileged
</Condition>
- <!-- Force overwriting all files and re-create shortcuts to guarantee a working environment. -->
+ <!-- Force overwriting all files and re-create shortcuts to guarantee a working environment -->
<Property Id='REINSTALLMODE' Value='amus'/>
<!-- Custom actions -->
<!-- Figure out where a previous installation was, if any -->
<?if $(env.BUILD_TARGET_ARCH) = "amd64" ?>
- <CustomAction Id="OriginalTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[ProgramFiles64Folder]\$(env.VBOX_VENDOR_SHORT)\VirtualBox" />
+ <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="DefaultTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[EXISTINGINSTALLDIR]" />
+ <CustomAction Id="ca_DefaultTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[EXISTINGINSTALLDIR]" />
<?else ?>
- <CustomAction Id="OriginalTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[ProgramFilesFolder]\$(env.VBOX_VENDOR_SHORT)\VirtualBox" />
+ <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="DefaultTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[EXISTINGINSTALLDIR]" />
+ <CustomAction Id="ca_DefaultTargetDir" Execute="firstSequence" Property="INSTALLDIR" Value="[EXISTINGINSTALLDIR]" />
<?endif ?>
<Binary Id="VBoxInstallHelper" SourceFile="$(env.PATH_OUT)\bin\VBoxInstallHelper.dll" />
- <CustomAction Id="CheckSerial" BinaryKey="VBoxInstallHelper" DllEntry="CheckSerial" Impersonate="no"/>
- <CustomAction Id="InstallPythonAPI" BinaryKey="VBoxInstallHelper" DllEntry="InstallPythonAPI" Impersonate="no"/>
- <CustomAction Id="InstallBranding" BinaryKey="VBoxInstallHelper" DllEntry="InstallBranding" Impersonate="no"/>
- <CustomAction Id="UninstallBranding" BinaryKey="VBoxInstallHelper" DllEntry="UninstallBranding" Impersonate="no"/>
+ <CustomAction Id="ca_CheckSerial" BinaryKey="VBoxInstallHelper" DllEntry="CheckSerial" Impersonate="no"/>
- <CustomAction Id="UninstallTAPInstances" BinaryKey="VBoxInstallHelper"
- DllEntry="UninstallTAPInstances" Execute="deferred" Return="check" Impersonate="no"/>
+ <CustomAction Id="ca_InstallPythonAPI" BinaryKey="VBoxInstallHelper" DllEntry="InstallPythonAPI" Execute="deferred" Return="check" Impersonate="no"/>
+ <CustomAction Id="ca_InstallPythonAPIArgs" Property="ca_InstallPythonAPI" Value="[INSTALLDIR]" Execute="immediate"/>
+
+ <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"/>
+
+ <CustomAction Id="ca_UninstallTAPInstances" BinaryKey="VBoxInstallHelper"
+ DllEntry="UninstallTAPInstances" Execute="deferred" Return="check" Impersonate="no"/>
<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
- <CustomAction Id="CreateHostOnlyInterfaceArgs" Property="CreateHostOnlyInterface" Value="[INSTALLDIR]" Execute="immediate"/>
- <CustomAction Id="CreateHostOnlyInterface" BinaryKey="VBoxInstallHelper" DllEntry="CreateHostOnlyInterface" Execute="deferred" Return="check" Impersonate="no"/>
+ <CustomAction Id="ca_CreateHostOnlyInterface" BinaryKey="VBoxInstallHelper" DllEntry="CreateHostOnlyInterface" Execute="deferred" Return="check" Impersonate="no"/>
+ <CustomAction Id="ca_CreateHostOnlyInterfaceArgs" Property="ca_CreateHostOnlyInterface" Value="[INSTALLDIR]" Execute="immediate"/>
- <CustomAction Id="RemoveHostOnlyInterfaces" BinaryKey="VBoxInstallHelper" DllEntry="RemoveHostOnlyInterfaces" Execute="deferred" Return="check" Impersonate="no"/>
+ <CustomAction Id="ca_RemoveHostOnlyInterfaces" BinaryKey="VBoxInstallHelper" DllEntry="RemoveHostOnlyInterfaces" Execute="deferred" Return="check" Impersonate="no"/>
- <CustomAction Id="InstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="InstallNetFlt" Execute="deferred" Return="check" Impersonate="no"/>
- <CustomAction Id="InstallNetFltArgs" Property="InstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
+ <CustomAction Id="ca_InstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="InstallNetFlt" Execute="deferred" Return="check" Impersonate="no"/>
+ <CustomAction Id="ca_InstallNetFltArgs" Property="ca_InstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
- <CustomAction Id="RollbackInstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="UninstallNetFlt" Execute="rollback" Impersonate="no"/>
- <CustomAction Id="RollbackInstallNetFltArgs" Property="RollbackInstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
+ <CustomAction Id="ca_RollbackInstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="UninstallNetFlt" Execute="rollback" Impersonate="no"/>
+ <CustomAction Id="ca_RollbackInstallNetFltArgs" Property="ca_RollbackInstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
- <CustomAction Id="UninstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="UninstallNetFlt" Execute="deferred" Return="check" Impersonate="no"/>
- <CustomAction Id="UninstallNetFltArgs" Property="UninstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
+ <CustomAction Id="ca_UninstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="UninstallNetFlt" Execute="deferred" Return="check" Impersonate="no"/>
+ <CustomAction Id="ca_UninstallNetFltArgs" Property="ca_UninstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
- <CustomAction Id="RollbackUninstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="InstallNetFlt" Execute="rollback" Impersonate="no"/>
- <CustomAction Id="RollbackUninstallNetFltArgs" Property="RollbackUninstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
+ <CustomAction Id="ca_RollbackUninstallNetFlt" BinaryKey="VBoxInstallHelper" DllEntry="InstallNetFlt" Execute="rollback" Impersonate="no"/>
+ <CustomAction Id="ca_RollbackUninstallNetFltArgs" Property="ca_RollbackUninstallNetFlt" Value="[INSTALLDIR]" Execute="immediate"/>
<?endif ?>
- <CustomAction Id="StartVBox" FileKey="vbox" ExeCommand="" Return="asyncNoWait" Impersonate="yes" />
+ <CustomAction Id="ca_StartVBox" FileKey="file_VirtualBox.exe" ExeCommand="" Return="asyncNoWait" Impersonate="yes" />
- <!-- Detect old Sun installation. -->
- <!-- Force a manual uninstall of an already installed Sun VirtualBox version first. -->
+ <!-- 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)">
+ <Condition Message="!(loc.SunFound)">
NOT VBOXSUN
</Condition>-->
- <!-- Detect old innotek installation. -->
- <!-- Force a manual uninstall of an already installed innotek VirtualBox version first. -->
+ <!-- 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)">
+ <Condition Message="!(loc.InnotekFound)">
NOT VBOXINNOTEK
</Condition>
@@ -213,110 +221,106 @@
<!-- Here comes the file/directory list. -->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="$(var.Property_ProgramFiles)" Name="PFiles">
- <Directory Id="INSTALLDIR" Name="VirtualB" LongName="$(env.VBOX_PRODUCT)">
+ <Directory Id="INSTALLDIR" Name="$(env.VBOX_PRODUCT)">
<?if $(env.VBOX_WITH_DOCS_PACKING) = "yes" ?>
- <Directory Id="documents" Name="doc">
+ <Directory Id="dir_Documents" Name="doc">
<!-- The documentation is a separate component. This allows to split the install process
into pieces if ever necessary. Maintenance is easier, too. The following component
will be installed in the "doc" folder. -->
- <Component Id="docs" Guid="40BD12C5-89A8-4B81-8A5E-5EEE2C2763C4">
+ <Component Id="cp_Docs" Guid="40BD12C5-89A8-4B81-8A5E-5EEE2C2763C4">
<?include $(env.PATH_TARGET)\Files_Doc.wxi ?>
</Component>
-
</Directory>
<?endif ?>
<!-- Device driver directory -->
- <Directory Id="drivers" Name="drivers">
-
- <Directory Id="vboxdrv" Name="vboxdrv">
- <Component Id="VBoxDrv" Guid="D3E2F2BB-569F-46A2-836C-BDF30FF1EDF8"
- DriverSequence="2" DriverLegacy="$(var.Property_DriverLegacy)" DriverForceInstall="yes"
- DriverAddRemovePrograms="no" DriverPlugAndPlayPrompt="no" Win64="$(var.Property_Win64)">
- <File Id="vboxdrvsys" Name="VBoxDrv.sys" DiskId="1" Vital="yes" KeyPath="yes"
+ <Directory Id="dir_Drivers" Name="drivers">
+ <Directory Id="dir_VBoxDrv" Name="vboxdrv">
+ <Component Id="cp_VBoxDrv" Guid="D3E2F2BB-569F-46A2-836C-BDF30FF1EDF8" Win64="$(var.Property_Win64)">
+ <difxapp:Driver AddRemovePrograms="no" ForceInstall="yes"
+ Legacy="$(var.Property_DriverLegacy)" Sequence="2" PlugAndPlayPrompt="no"/>
+ <File Id="file_VBoxDrv.sys" Name="VBoxDrv.sys" KeyPath="yes"
Source="$(env.PATH_OUT)\bin\VBoxDrv.sys"/>
- <File Id="vboxdrvinf" Name="VBoxDrv.inf" DiskId="1" Vital="yes"
+ <File Id="file_VBoxDrv.inf" Name="VBoxDrv.inf"
Source="$(env.PATH_OUT)\bin\VBoxDrv.inf" />
<?if $(env.VBOX_SIGNING_MODE) != none ?>
- <File Id="vboxdrvcat" Name="VBoxDrv.cat" DiskId="1" Vital="yes"
+ <File Id="file_VBoxDrv.cat" Name="VBoxDrv.cat"
Source="$(env.PATH_OUT)\bin\VBoxDrv.cat" />
<?endif ?>
- </Component> <!-- Directory "drivers\vboxdrv" -->
+ </Component>
</Directory>
- <Directory Id="usbdrv" Name="USB">
- <Directory Id="usbfilter" Name="filter">
- <Component Id="USBFilterDriver" Guid="B7D782D2-96DF-4775-A0E1-A76CF7B04B65"
- DriverSequence="0" DriverLegacy="$(var.Property_DriverLegacy)" DriverForceInstall="yes"
- DriverAddRemovePrograms="no" DriverPlugAndPlayPrompt="no" Win64="$(var.Property_Win64)">
- <File Id="vboxusbmon" Name="VBoxUSBM.sys" LongName="VBoxUSBMon.sys" DiskId="1" Vital="yes"
+ <Directory Id="dir_USB" Name="USB">
+ <Directory Id="dir_USBFilter" Name="filter">
+ <Component Id="cp_USBFilterDriver" Guid="B7D782D2-96DF-4775-A0E1-A76CF7B04B65" Win64="$(var.Property_Win64)">
+ <difxapp:Driver AddRemovePrograms="no" ForceInstall="yes"
+ Legacy="$(var.Property_DriverLegacy)" Sequence="0" PlugAndPlayPrompt="no"/>
+ <File Id="file_VBoxUSBMon.sys" Name="VBoxUSBMon.sys"
Source="$(env.PATH_OUT)\bin\VBoxUSBMon.sys" />
- <File Id="vboxusbmoninf" Name="VBoxUSBM.inf" LongName="VBoxUSBMon.inf" DiskId="1" Vital="yes"
+ <File Id="file_VBoxUSBMon.inf" Name="VBoxUSBMon.inf"
Source="$(env.PATH_OUT)\bin\VBoxUSBMon.inf" />
<?if $(env.VBOX_SIGNING_MODE) != none ?>
- <File Id="vboxusbmoncat" Name="VBoxUSBM.cat" LongName="VBoxUSBMon.cat" DiskId="1" Vital="yes"
+ <File Id="file_VBoxUSBMon.cat" Name="VBoxUSBMon.cat"
Source="$(env.PATH_OUT)\bin\VBoxUSBMon.cat" />
<?endif ?>
- </Component> <!-- USBFilterDriver -->
- </Directory> <!-- Directory "drivers\usb\filter" -->
-
- <Directory Id="usbdevice" Name="device">
- <Component Id="USBDeviceDriver" Guid="010FE46A-E358-43E2-8BDC-38BC8BEC82E0"
- DriverSequence="0" DriverLegacy="$(var.Property_DriverLegacy)" DriverForceInstall="yes"
- DriverAddRemovePrograms="no" DriverPlugAndPlayPrompt="no" Win64="$(var.Property_Win64)">
- <File Id="vboxusbdrv" Name="VBoxUSB.sys" DiskId="1" Vital="yes"
+ </Component>
+ </Directory>
+
+ <Directory Id="dir_USBDevice" Name="device">
+ <Component Id="cp_USBDeviceDriver" Guid="010FE46A-E358-43E2-8BDC-38BC8BEC82E0" Win64="$(var.Property_Win64)">
+ <difxapp:Driver AddRemovePrograms="no" ForceInstall="yes"
+ Legacy="$(var.Property_DriverLegacy)" Sequence="0" PlugAndPlayPrompt="no"/>
+ <File Id="file_VBoxUSB.sys" Name="VBoxUSB.sys"
Source="$(env.PATH_OUT)\bin\VBoxUSB.sys" />
- <File Id="vboxusbinf" Name="VBoxUSB.inf" DiskId="1" Vital="yes"
+ <File Id="file_VBoxUSB.inf" Name="VBoxUSB.inf"
Source="$(env.PATH_OUT)\bin\VBoxUSB.inf" />
<?if $(env.VBOX_SIGNING_MODE) != none ?>
- <File Id="vboxusbcat" Name="VBoxUSB.cat" DiskId="1" Vital="yes"
+ <File Id="file_VBoxUSB.cat" Name="VBoxUSB.cat"
Source="$(env.PATH_OUT)\bin\VBoxUSB.cat" />
<?endif ?>
- </Component> <!-- USBDeviceDriver -->
- </Directory> <!-- Directory "drivers\usb\device" -->
- </Directory> <!-- Directory "drivers\usb" -->
+ </Component>
+ </Directory>
+ </Directory>
<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
- <Directory Id="network" Name="network">
- <Directory Id="NetFltDir" Name="netflt">
- <Component Id="NetFltDriver" Guid="F0A02F6B-A349-42f8-A2EB-569DCAAAF846" Win64="$(var.Property_Win64)">
- <File Id="vboxnetfltsys" Name="VBoxNFlt.sys" LongName="VBoxNetFlt.sys" DiskId="1" Vital="yes" KeyPath="yes"
- Source="$(env.PATH_OUT)\bin\VBoxNetFlt.sys"
- Checksum="yes"/>
- <File Id="vboxnetfltnotifydll" Name="VBoxNFN.dll" LongName="VBoxNetFltNotify.dll" DiskId="1" Vital="yes"
- Source="$(env.PATH_OUT)\bin\VBoxNetFltNotify.dll"
- Checksum="yes"/>
- <File Id="vboxnetfltinf" Name="VBoxNFlt.inf" LongName="VBoxNetFlt.inf" DiskId="1" Vital="yes"
- Source="$(env.PATH_OUT)\bin\VBoxNetFlt.inf" />
+ <Directory Id="dir_Network" Name="network">
+ <Directory Id="dir_NetFlt" Name="netflt">
+ <Component Id="cp_NetFltDriver" Guid="F0A02F6B-A349-42f8-A2EB-569DCAAAF846" Win64="$(var.Property_Win64)">
+ <File Id="file_VBoxNetFlt.sys" Name="VBoxNetFlt.sys" KeyPath="yes"
+ Source="$(env.PATH_OUT)\bin\VBoxNetFlt.sys" Checksum="yes"/>
+ <File Id="file_VBoxNetFltNobj.sys" Name="VBoxNetFltNobj.dll"
+ Source="$(env.PATH_OUT)\bin\VBoxNetFltNobj.dll" Checksum="yes"/>
+ <File Id="file_VBoxNetFltM.inf" Name="VBoxNetFltM.inf"
+ Source="$(env.PATH_OUT)\bin\VBoxNetFltM.inf" />
+ <File Id="file_VBoxNetFlt.inf" Name="VBoxNetFlt.inf"
+ Source="$(env.PATH_OUT)\bin\VBoxNetFlt.inf" />
<?if $(env.VBOX_SIGNING_MODE) != none ?>
- <File Id="vboxnetfltcat" Name="VBoxNFlt.cat" LongName="VBoxNetFlt.cat" DiskId="1" Vital="yes"
- Source="$(env.PATH_OUT)\bin\VBoxNetFlt.cat" />
+ <File Id="file_VBoxNetFlt.cat" Name="VBoxNetFlt.cat"
+ Source="$(env.PATH_OUT)\bin\VBoxNetFlt.cat" />
<?endif ?>
- <File Id="vboxnetflt_minf" Name="VBoxNFlM.inf" LongName="VBoxNetFlt_m.inf" DiskId="1" Vital="yes"
- Source="$(env.PATH_OUT)\bin\VBoxNetFlt_m.inf" />
</Component>
- </Directory> <!-- Directory "drivers\network\netflt" -->
- <Directory Id="NetAdpDir" Name="netadp">
- <Component Id="NetAdpDriver" Guid="7adf3e12-af3c-4d36-8bec-36d5064cf84f" Win64="$(var.Property_Win64)">
- <File Id="vboxnetadpsys" Name="VBoxNAdp.sys" LongName="VBoxNetAdp.sys" DiskId="1" Vital="yes" KeyPath="yes"
- Source="$(env.PATH_OUT)\bin\VBoxNetAdp.sys"
- Checksum="yes"/>
- <File Id="vboxnetadpinf" Name="VBoxNAdp.inf" LongName="VBoxNetAdp.inf" DiskId="1" Vital="yes"
- Source="$(env.PATH_OUT)\bin\VBoxNetAdp.inf" />
+ </Directory>
+
+ <Directory Id="dir_NetAdp" Name="netadp">
+ <Component Id="cp_NetAdpDriver" Guid="7adf3e12-af3c-4d36-8bec-36d5064cf84f" Win64="$(var.Property_Win64)">
+ <File Id="file_VBoxNetAdp.sys" Name="VBoxNetAdp.sys" KeyPath="yes"
+ Source="$(env.PATH_OUT)\bin\VBoxNetAdp.sys" Checksum="yes"/>
+ <File Id="file_VBoxNetAdp.inf" Name="VBoxNetAdp.inf"
+ Source="$(env.PATH_OUT)\bin\VBoxNetAdp.inf" />
<?if $(env.VBOX_SIGNING_MODE) != none ?>
- <File Id="vboxnetadpcat" Name="VBoxNAdp.cat" LongName="VBoxNetAdp.cat" DiskId="1" Vital="yes"
- Source="$(env.PATH_OUT)\bin\VBoxNetAdp.cat" />
+ <File Id="file_VBoxNetAdp.cat" Name="VBoxNetAdp.cat"
+ Source="$(env.PATH_OUT)\bin\VBoxNetAdp.cat" />
<?endif ?>
- </Component> <!-- NetAdpDriver -->
- </Directory> <!-- Directory "drivers\network\netadp" -->
- </Directory> <!-- Directory "drivers\network" -->
+ </Component>
+ </Directory>
+ </Directory>
<?endif ?>
</Directory> <!-- Directory "drivers" -->
<!-- National Language Support directory -->
- <Directory Id="nls" Name="nls">
- <Component Id="nls" Guid="D63517D7-1CF3-4D06-B3EE-C561E323069B">
+ <Directory Id="dir_NLS" Name="nls">
+ <Component Id="cp_NLS" Guid="D63517D7-1CF3-4D06-B3EE-C561E323069B" Win64="$(var.Property_Win64)">
<!-- Include the autogenerated NLS file list -->
<?include $(env.PATH_TARGET)\VBoxGuiNLS.wxi ?>
</Component>
@@ -324,18 +328,19 @@
<!-- COM components have a separate entry mainly because of the KeyPath attribute (that hints the
TypeLib element where to take the TLB resource from) may appear only once per Component. -->
- <Component Id="MainCOM" Guid="CD4A3C6C-C2D5-428D-90A1-B6DA3D0777D6" Win64="$(var.Property_Win64)">
+ <Component Id="cp_MainCOM" Guid="CD4A3C6C-C2D5-428D-90A1-B6DA3D0777D6" Win64="$(var.Property_Win64)">
- <File Id="VBoxSVC" Name="VBoxSVC.exe" DiskId="1" Vital="yes"
+ <!-- File ID *must not* be changed because of our typelib template generation file! -->
+ <File Id="VBoxSVC" Name="VBoxSVC.exe"
Source="$(env.PATH_OUT)\bin\VBoxSVC.exe">
</File>
<!-- We set KeyPath on this file to instruct TypeLib to read the TLB resource from it
and create appropriate Interface registry entries. Note that the same TLB is present
in VBoxSVC.exe - it's just a matter of choice which one to use -->
- <File Id="VBoxC" Name="VBoxC.dll" DiskId="1" Vital="yes"
- Source="$(env.PATH_OUT)\bin\VBoxC.dll"
- KeyPath="yes">
+ <!-- File ID *must not* be changed because of our typelib template generation file! -->
+ <File Id="VBoxC" Name="VBoxC.dll"
+ Source="$(env.PATH_OUT)\bin\VBoxC.dll" KeyPath="yes">
</File>
<!-- Include the autogenerated TypeLib block -->
@@ -343,59 +348,63 @@
</Component>
- <Component Id="DesktopShortcut" Guid="668F8A1A-F5CE-48B3-BB1A-3042EE27B279" Win64="$(var.Property_Win64)">
- <Condition>INSTALLDESKTOPSHORTCUT</Condition>
- <CreateFolder/>
- <Shortcut Id="VBoxDesktopShortcut" Directory="DesktopFolder"
- Name="VBox" LongName="$(env.VBOX_PRODUCT)" WorkingDirectory="INSTALLDIR"
- Advertise="no" Target="[#vbox]" />
- </Component>
+ <!--
- <Component Id="QuicklaunchShortcut" Guid="CC19E026-938A-41CB-8E77-3F33296244B6" Win64="$(var.Property_Win64)">
- <Condition>INSTALLQUICKLAUNCHSHORTCUT</Condition>
- <CreateFolder/>
- <Shortcut Id="VBoxQuicklaunchShortcut" Directory="QuicklaunchFolder"
- Name="VBox" LongName="$(env.VBOX_PRODUCT)" WorkingDirectory="INSTALLDIR"
- Advertise="no" Target="[#vbox]" />
- </Component>
+ <Component Id="Cp_StartMenuShortcut" Guid="1C137D24-E599-47BD-98D0-2F62F202A8EA" Win64="$(var.Property_Win64)">
+ <RegistryValue Root="HKCU" Key="$(var.Property_RegKeyInstall)" Type="string"
+ Value="installed" KeyPath="yes" />
+ <Shortcut Id="ShortcutStartMenuVBox" Directory="ProgramMenuDir"
+ Name="VirtualBox" WorkingDirectory="INSTALLDIR" Advertise="no" Target="VirtualBox.exe" />
+ <RemoveFolder Id="ShortcutStartMenuVBoxRemove" On="uninstall" />
+ </Component>-->
+
+ <!---->
<!-- All Binaries, DLLs (except COM) and drivers are in one component because they belong together. Additional
binaries e.g. test tools, utilities etc. should be in another component so they"re clearly separated. -->
- <Component Id="MainBinaries" Guid="5C8FE57A-F744-4DE0-AA3F-A563F486AD98" Win64="$(var.Property_Win64)">
+ <Component Id="cp_MainBinaries" Guid="5C8FE57A-F744-4DE0-AA3F-A563F486AD98" Win64="$(var.Property_Win64)">
+
<!-- Set required environment variables. -->
- <Environment Id="EnvVBoxInstallDir" Action="set" Name="VBOX_INSTALL_PATH"
- System="yes" Part="last" Permanent="no" Value="[INSTALLDIR]" />
+ <Environment Id="env_VBoxInstallDir" Action="set" Name="VBOX_INSTALL_PATH"
+ System="yes" Part="last" Permanent="no" Value="[INSTALLDIR]" />
+
<!-- Register file extensions. Note: Extension Id's *must not* be changed! These specify the actual
file extension to handle. Also, here would be the place to add more fancy DDE stuff later.
Important: The IDs in "IconIndex" *must* be matching "Resources\resource.h". -->
- <ProgId Id="VirtualBox.Shell.vbox" Description="VirtualBox Machine Definition" Icon="[#vboxresdll]" IconIndex="-201">
+ <ProgId Id="progId_VirtualBox.Shell.vbox" Description="VirtualBox Machine Definition" Icon="file_VBoxRes.dll" IconIndex="-201">
<Extension Id="vbox" ContentType="application/x-virtualbox-vbox">
- <Verb Id="open" Sequence="1" Command="Open" Target="[#vbox]" Argument="&quot;%1&quot;" />
+ <Verb Id="open" Command="Open" TargetFile="file_VirtualBox.exe" Argument="&quot;%1&quot;" />
</Extension>
</ProgId>
- <ProgId Id="VirtualBox.Shell.vbox-extpack" Description="VirtualBox Extension Pack" Icon="[#vboxresdll]" IconIndex="-202">
+ <ProgId Id="progId_VirtualBox.Shell.vbox-extpack" Description="VirtualBox Extension Pack" Icon="file_VBoxRes.dll" IconIndex="-202">
<Extension Id="vbox-extpack" ContentType="application/x-virtualbox-vbox-extpack">
- <Verb Id="open" Sequence="1" Command="Open" Target="[#vbox]" Argument="&quot;%1&quot;" />
+ <Verb Id="open" Command="Open" TargetFile="file_VirtualBox.exe" Argument="&quot;%1&quot;" />
</Extension>
</ProgId>
- <ProgId Id="VirtualBox.Shell.ovf" Description="Open Virtualization Format" Icon="[#vboxresdll]" IconIndex="-301">
+ <ProgId Id="progId_VirtualBox.Shell.ovf" Description="Open Virtualization Format" Icon="file_VBoxRes.dll" IconIndex="-301">
<Extension Id="ovf" ContentType="application/x-virtualbox-ovf">
- <Verb Id="open" Sequence="1" Command="Open" Target="[#vbox]" Argument="&quot;%1&quot;" />
+ <Verb Id="open" Command="Open" TargetFile="file_VirtualBox.exe" Argument="&quot;%1&quot;" />
</Extension>
</ProgId>
- <ProgId Id="VirtualBox.Shell.ova" Description="Open Virtualization Format Archive" Icon="[#vboxresdll]" IconIndex="-302">
+ <ProgId Id="progId_VirtualBox.Shell.ova" Description="Open Virtualization Format Archive" Icon="file_VBoxRes.dll" IconIndex="-302">
<Extension Id="ova" ContentType="application/x-virtualbox-ova">
- <Verb Id="open" Sequence="1" Command="Open" Target="[#vbox]" Argument="&quot;%1&quot;" />
+ <Verb Id="open" Command="Open" TargetFile="file_VirtualBox.exe" Argument="&quot;%1&quot;" />
</Extension>
</ProgId>
- <!-- The "Name" attribute must always be present. If the name is longer than 8.3 the additional "LongName"
- attribute can be used. -->
- <File Id="vbox" Name="vbox.exe" LongName="VirtualBox.exe" DiskId="1" Vital="yes"
- Source="$(env.PATH_OUT)\bin\VirtualBox.exe">
- <!-- The target folder for the shortcut in the "Programs" menu is defined below. -->
- <Shortcut Id="startmenuVBox" Directory="ProgramMenuDir" Name="VBox"
- LongName="VirtualBox" WorkingDirectory="INSTALLDIR"/>
- </File>
+ <ProgId Id="progId_VirtualBox.Shell.vdi" Description="Virtual Disk Image" Icon="file_VBoxRes.dll" IconIndex="-303">
+ <Extension Id="vdi" ContentType="application/x-virtualbox-vdi" />
+ </ProgId>
+ <ProgId Id="progId_VirtualBox.Shell.vmdk" Description="Virtual Machine Disk Format" Icon="file_VBoxRes.dll" IconIndex="-304">
+ <Extension Id="vmdk" ContentType="application/x-virtualbox-vmdk" />
+ </ProgId>
+ <ProgId Id="progId_VirtualBox.Shell.vhd" Description="Virtual Hard Disk" Icon="file_VBoxRes.dll" IconIndex="-305">
+ <Extension Id="vhd" ContentType="application/x-virtualbox-vhd" />
+ </ProgId>
+ <ProgId Id="progId_VirtualBox.Shell.hdd" Description="Virtual Hard Disk" Icon="file_VBoxRes.dll" IconIndex="-306">
+ <Extension Id="hdd" ContentType="application/x-virtualbox-hdd" />
+ </ProgId>
+
+ <!-- Files -->
<?if $(env.VBOX_WITH_DOCS_PACKING) = "yes" ?>
<!-- Include all user manual .CHM files (file is generated by makefile). -->
<?include $(env.PATH_TARGET)\Files_Main.wxi ?>
@@ -403,142 +412,145 @@
<!-- Include all license files (file is generated by makefile). -->
<?include $(env.PATH_TARGET)\Files_License.wxi ?>
-<?if $(env.VBOX_WITH_DEBUGGER_GUI) = "yes" ?>
- <File Id="vboxdbgdll" Name="VBoxDbg.dll" DiskId="1" Vital="yes"
- Source="$(env.PATH_OUT)\bin\VBoxDbg.dll" />
-<?endif ?>
-
- <File Id="vboxmanage" Name="VBoxMan.exe" LongName="VBoxManage.exe" DiskId="1" Vital="yes"
+ <!-- Frontends -->
+ <File Id="file_VBoxManage.exe" Name="VBoxManage.exe"
Source="$(env.PATH_OUT)\bin\VBoxManage.exe" />
- <File Id="vboxheadless" Name="VBoxHead.exe" LongName="VBoxHeadless.exe" DiskId="1" Vital="yes"
+ <File Id="file_VBoxHeadless.exe" Name="VBoxHeadless.exe"
Source="$(env.PATH_OUT)\bin\VBoxHeadless.exe">
-
<!-- Create a simple shortcut for VBoxVRDP, which is not present anymore, pointing to VBoxHeadless.exe -->
- <Shortcut Id="ShortcutVBoxVRDP" Directory="INSTALLDIR" Name="VBoxVRDP" Show="normal" WorkingDirectory="INSTALLDIR"/>
-
+ <!-- <Shortcut Id="ShortcutVBoxVRDP" Directory="INSTALLDIR" Name="VBoxVRDP" Show="normal" WorkingDirectory="INSTALLDIR"/> -->
</File>
+ <File Id="file_VBoxBalloonCtrl.exe" Name="VBoxBalloonCtrl.exe"
+ Source="$(env.PATH_OUT)\bin\VBoxBalloonCtrl.exe"/>
- <File Id="vboxnetdhcp" Name="VBoxDHCP.exe" LongName="VBoxNetDHCP.exe" DiskId="1" Vital="yes"
+ <!-- Misc tools -->
+ <File Id="file_VBoxImg.exe" Name="vbox-img.exe"
+ Source="$(env.PATH_OUT)\bin\vbox-img.exe"/>
+ <File Id="file_VBoxNetDHCP.exe" Name="VBoxNetDHCP.exe"
Source="$(env.PATH_OUT)\bin\VBoxNetDHCP.exe"/>
<?if $(env.VBOX_WITH_EXTPACK) = "yes" ?>
- <File Id="vboxepha" Name="VBoxEPHA.exe" LongName="VBoxExtPackHelperApp.exe" DiskId="1" Vital="yes"
+ <File Id="file_VBoxExtPackHelperApp.exe" Name="VBoxExtPackHelperApp.exe"
Source="$(env.PATH_OUT)\bin\VBoxExtPackHelperApp.exe"/>
<?endif ?>
- <File Id="vboxballoonctrl" Name="VBoxBCtl.exe" LongName="VBoxBalloonCtrl.exe" DiskId="1" Vital="yes"
- Source="$(env.PATH_OUT)\bin\VBoxBalloonCtrl.exe"/>
-
<!-- VBox DLL files -->
- <File Id="vboxdddll" Name="VBoxDD.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxDD.dll" Name="VBoxDD.dll"
Source="$(env.PATH_OUT)\bin\VBoxDD.dll" />
- <File Id="vboxdd2dll" Name="VBoxDD2.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxDD2.dll" Name="VBoxDD2.dll"
Source="$(env.PATH_OUT)\bin\VBoxDD2.dll" />
- <File Id="vboxddudll" Name="VBoxDDU.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxDDU.dll" Name="VBoxDDU.dll"
Source="$(env.PATH_OUT)\bin\VBoxDDU.dll" />
- <File Id="vboxrtdll" Name="VBoxRT.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxRT.dll" Name="VBoxRT.dll"
Source="$(env.PATH_OUT)\bin\VBoxRT.dll" />
- <File Id="vboxremdll" Name="VBoxREM.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxREM.dll" Name="VBoxREM.dll"
Source="$(env.PATH_OUT)\bin\VBoxREM.dll" />
<?if $(env.BUILD_TARGET_ARCH) = "amd64" ?>
- <File Id="vboxrem2rel" Name="VBoxREM2.rel" DiskId="1" Vital="yes"
+ <File Id="file_VBoxREM2.rel" Name="VBoxREM2.rel"
Source="$(env.PATH_OUT)\bin\VBoxREM2.rel" />
<?else ?>
- <File Id="vboxrem32dll" Name="VBoxREM3.dll" LongName="VBoxREM32.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxREM32.dll" Name="VBoxREM32.dll"
Source="$(env.PATH_OUT)\bin\VBoxREM32.dll" />
- <File Id="vboxrem64dll" Name="VBoxREM6.dll" LongName="VBoxREM64.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxREM64.dll" Name="VBoxREM64.dll"
Source="$(env.PATH_OUT)\bin\VBoxREM64.dll" />
<?endif ?>
- <File Id="vboxvmmdll" Name="VBoxVMM.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxVMM.dll" Name="VBoxVMM.dll"
Source="$(env.PATH_OUT)\bin\VBoxVMM.dll" />
<?if $(env.VBOX_WITH_VRDP) = "yes" ?>
- <File Id="vboxvrdpdll" Name="VBoxVRDP.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxVRDP.dll" Name="VBoxVRDP.dll"
Source="$(env.PATH_OUT)\bin\VBoxVRDP.dll" />
<?endif ?>
- <File Id="vboxshfolderdll" Name="VBoxSF.dll" LongName="VBoxSharedFolders.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxSharedFolders.dll" Name="VBoxSharedFolders.dll"
Source="$(env.PATH_OUT)\bin\VBoxSharedFolders.dll" />
- <File Id="vboxshclpbrddll" Name="VBoxClip.dll" LongName="VBoxSharedClipboard.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxSharedClipboard.dll" Name="VBoxSharedClipboard.dll"
Source="$(env.PATH_OUT)\bin\VBoxSharedClipboard.dll" />
<?if $(env.VBOX_WITH_GUEST_PROPS) = "yes" ?>
- <File Id="vboxguestpropdll" Name="VBoxProp.dll" LongName="VBoxGuestPropSvc.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxGuestPropSvc.dll" Name="VBoxGuestPropSvc.dll"
Source="$(env.PATH_OUT)\bin\VBoxGuestPropSvc.dll" />
<?endif ?>
<?if $(env.VBOX_WITH_GUEST_CONTROL) = "yes" ?>
- <File Id="vboxguestctrldll" Name="VBoxCtrl.dll" LongName="VBoxGuestControlSvc.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxGuestControlSvc.dll" Name="VBoxGuestControlSvc.dll"
Source="$(env.PATH_OUT)\bin\VBoxGuestControlSvc.dll" />
<?endif ?>
- <File Id="vboxauthdll" Name="VBoxAuth.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxAuth.dll" Name="VBoxAuth.dll"
Source="$(env.PATH_OUT)\bin\VBoxAuth.dll" />
- <File Id="vboxauthsimpledll" Name="VBoxASim.dll" LongName="VBoxAuthSimple.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxAuthSimple.dll" Name="VBoxAuthSimple.dll"
Source="$(env.PATH_OUT)\bin\VBoxAuthSimple.dll" />
<!-- Include resource DLL (icons, ...). -->
- <File Id="vboxresdll" LongName="VBoxRes.dll" Name="VBoxRes.dll" DiskId="$(var.Property_DiskIdCommon)" Vital="yes"
+ <File Id="file_VBoxRes.dll" Name="VBoxRes.dll" DiskId="$(var.Property_DiskIdCommon)"
Source="$(env.PATH_OUT)\bin\VBoxRes.dll" />
- <File Id="vmmgc" Name="VMMGC.gc" DiskId="1" Vital="yes"
+ <File Id="file_VMMGC.gc" Name="VMMGC.gc"
Source="$(env.PATH_OUT)\bin\VMMGC.gc" />
- <File Id="vboxddgc" Name="VBoxDDGC.gc" DiskId="1" Vital="yes"
+ <File Id="file_VBoxDDGC.gc" Name="VBoxDDGC.gc"
Source="$(env.PATH_OUT)\bin\VBoxDDGC.gc" />
- <File Id="vboxdd2gc" Name="VBoxDD2.gc" LongName="VBoxDD2GC.gc" DiskId="1" Vital="yes"
+ <File Id="file_VBoxDD2GC.gc" Name="VBoxDD2GC.gc"
Source="$(env.PATH_OUT)\bin\VBoxDD2GC.gc" />
- <File Id="vmmr0" Name="VMMR0.r0" DiskId="1" Vital="yes"
+ <File Id="file_VMMR0.r0" Name="VMMR0.r0"
Source="$(env.PATH_OUT)\bin\VMMR0.r0" />
- <File Id="vboxddr0" Name="VBoxDDR0.r0" DiskId="1" Vital="yes"
+ <File Id="file_VBoxDDR0.r0" Name="VBoxDDR0.r0"
Source="$(env.PATH_OUT)\bin\VBoxDDR0.r0" />
- <File Id="vboxdd2r0" Name="VBDD2R0.r0" LongName="VBoxDD2R0.r0" DiskId="1" Vital="yes"
+ <File Id="file_VBoxDD2R0.r0" Name="VBoxDD2R0.r0"
Source="$(env.PATH_OUT)\bin\VBoxDD2R0.r0" />
<?if $(env.VBOX_WITH_CROGL) = "yes" ?>
- <File Id="vboxtestogl" Name="VBTstOGL.exe" LongName="VBoxTestOGL.exe" DiskId="1" Vital="yes"
+ <File Id="file_VBoxTestOGL.exe" Name="VBoxTestOGL.exe"
Source="$(env.PATH_OUT)\bin\VBoxTestOGL.exe" />
<?endif ?>
- <!-- Qt stuff -->
- <File Id="qtcore4dll" Name="QtCrVBx4.dll" LongName="QtCoreVBox4.dll" DiskId="1" Vital="yes"
+ <!-- Qt frontend -->
+ <File Id="file_VirtualBox.exe" Name="VirtualBox.exe"
+ Source="$(env.PATH_OUT)\bin\VirtualBox.exe">
+ </File>
+ <File Id="file_QtCoreVBox4.dll" Name="QtCoreVBox4.dll"
Source="$(env.PATH_OUT)\bin\QtCoreVBox4.dll" />
- <File Id="qtgui4dll" Name="QtGuVbx4.dll" LongName="QtGuiVBox4.dll" DiskId="1" Vital="yes"
+ <File Id="file_QtGuiVBox4.dll" Name="QtGuiVBox4.dll"
Source="$(env.PATH_OUT)\bin\QtGuiVBox4.dll" />
- <File Id="qtnetwork4dll" Name="QtNwVBx4.dll" LongName="QtNetworkVBox4.dll" DiskId="1" Vital="yes"
+ <File Id="file_QtNetworkVBox4.dll" Name="QtNetworkVBox4.dll"
Source="$(env.PATH_OUT)\bin\QtNetworkVBox4.dll" />
+<?if $(env.VBOX_WITH_DEBUGGER_GUI) = "yes" ?>
+ <File Id="file_VBoxDbg.dll" Name="VBoxDbg.dll"
+ Source="$(env.PATH_OUT)\bin\VBoxDbg.dll" />
+<?endif ?>
<?if $(env.VBOX_GUI_USE_QGL) = "yes" ?>
- <File Id="qtopengl4dll" Name="QtGlVBx4.dll" LongName="QtOpenGLVBox4.dll" DiskId="1" Vital="yes"
+ <File Id="file_QtOpenGLVBox4.dll" Name="QtOpenGLVBox4.dll"
Source="$(env.PATH_OUT)\bin\QtOpenGLVBox4.dll" />
<?endif?>
<?if $(env.VBOX_USE_VCC80) = "yes" ?>
<!-- MS v8 Runtime DLL files (private assembly) -->
- <File Id="vc80crtmft" Name="VC80CRT.mft" LongName="Microsoft.VC80.CRT.manifest" DiskId="1" Vital="yes"
+ <File Id="file_Microsoft.VC80.CRT.manifest" Name="Microsoft.VC80.CRT.manifest"
Source="$(env.PATH_OUT)\bin\Microsoft.VC80.CRT\Microsoft.VC80.CRT.manifest" />
- <File Id="msvcr80dll" Name="msvcr80.dll" DiskId="1" Vital="yes"
+ <File Id="file_msvcr80.dll" Name="msvcr80.dll"
Source="$(env.PATH_OUT)\bin\Microsoft.VC80.CRT\msvcr80.dll" />
- <File Id="msvcp80dll" Name="msvcp80.dll" DiskId="1" Vital="yes"
+ <File Id="file_msvcp80.dll" Name="msvcp80.dll"
Source="$(env.PATH_OUT)\bin\Microsoft.VC80.CRT\msvcp80.dll" />
<?endif?>
<!-- MS v7 Runtime DLL files -->
<?if $(env.VBOX_USE_VCC80) != "yes" ?>
- <File Id="msvcpdll" Name="msvcp71.dll" DiskId="1" Vital="yes"
+ <File Id="file_msvcp71.dll" Name="msvcp71.dll"
Source="$(env.PATH_OUT)\bin\msvcp71.dll" />
- <File Id="msvcrtdll" Name="msvcrt.dll" DiskId="1" Vital="yes"
+ <File Id="file_msvcrt.dll" Name="msvcrt.dll"
Source="$(env.PATH_OUT)\bin\msvcrt.dll" />
<?endif?>
<?if $(env.BUILD_TARGET_ARCH) != "amd64" ?>
- <File Id="msvcrdll" Name="msvcr71.dll" DiskId="1" Vital="yes"
+ <File Id="msvcrdll" Name="msvcr71.dll"
Source="$(env.PATH_OUT)\bin\msvcr71.dll" />
<?endif?>
<!-- EFI firmware -->
<?if $(env.VBOX_WITH_EFIFW_PACKING) = "yes" ?>
- <File Id="vboxefifd32" LongName="VBoxEFI32.fd" Name="efi32.fd" DiskId="$(var.Property_DiskIdCommon)" Vital="yes"
+ <File Id="file_VBoxEFI32.fd" Name="VBoxEFI32.fd" DiskId="$(var.Property_DiskIdCommon)"
Source="$(env.PATH_OUT)\bin\VBoxEFI32.fd" />
- <File Id="vboxefifd64" LongName="VBoxEFI64.fd" Name="efi64.fd" DiskId="$(var.Property_DiskIdCommon)" Vital="yes"
+ <File Id="file_VBoxEFI64.fd" Name="VBoxEFI64.fd" DiskId="$(var.Property_DiskIdCommon)"
Source="$(env.PATH_OUT)\bin\VBoxEFI64.fd" />
<?endif?>
<!-- VBox guest additions -->
<?if $(env.VBOX_WITH_ADDITIONS_PACKING) = "yes" ?>
<?if $(env.VBOX_WITH_COMBINED_PACKAGE) = "yes" ?>
- <File Id="VBoxGuestAdditions.iso" Name="VBoxAdd.iso" LongName="VBoxGuestAdditions.iso" DiskId="2" Vital="yes"
+ <File Id="file_VBoxGuestAdditions.iso" Name="VBoxGuestAdditions.iso" DiskId="2"
Source="$(env.PATH_MULTIARCH_GUEST_ADDITIONS_ISO)\VBoxGuestAdditions.iso" />
<?else ?>
- <File Id="vboxguest" Name="VBoxAdd.iso" LongName="VBoxGuestAdditionsiso" DiskId="1" Vital="yes"
+ <File Id="file_VBoxGuestAdditions.iso" Name="VBoxGuestAdditions.iso"
Source="$(env.PATH_OUT)\bin\additions\VBoxGuestAdditions.iso" />
<?endif ?>
<?endif ?>
@@ -549,154 +561,180 @@
<?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
<!-- Qt accessible plugins -->
- <Directory Id="accessible" Name="accessbl" LongName="accessible">
- <Component Id="qtaccessible" Guid="12040EF9-D4A8-4FB2-A69C-CA2F5C354A45">
- <File Id="qtaccessibleplugindll" Name="qtacsw4.dll" LongName="qtaccessiblewidgets4.dll" DiskId="1" Vital="yes"
+ <Directory Id="dir_Accessible" Name="accessible">
+ <Component Id="cp_QtAccessible" Guid="12040EF9-D4A8-4FB2-A69C-CA2F5C354A45" Win64="$(var.Property_Win64)">
+ <File Id="file_qtaccessiblewidgets4.dll" Name="qtaccessiblewidgets4.dll"
Source="$(env.PATH_OUT)\bin\accessible\qtaccessiblewidgets4.dll" />
</Component>
- </Directory> <!-- Qt accessible plugins -->
+ </Directory>
<?endif?>
<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
<!-- Python bindings -->
- <Directory Id="sdk" Name="sdk">
- <Directory Id="installer" Name="install">
- <Component Id="VBoxPyInst" Guid="C9A40306-5102-11DE-A7BA-C3C555D89593">
- <File Id="vboxapisetup" Name="pysetup.py" LongName="vboxapisetup.py" DiskId="$(var.Property_DiskIdCommon)" Vital="yes"
- Source="$(env.PATH_OUT)\bin\sdk\installer\vboxapisetup.py" />
+ <Directory Id="dir_SDK" Name="sdk">
+ <Directory Id="dir_SDKInstall" Name="install">
+ <Component Id="cp_VBoxPyInst" Guid="C9A40306-5102-11DE-A7BA-C3C555D89593" Win64="$(var.Property_Win64)">
+ <File Id="file_vboxapisetup.py" Name="vboxapisetup.py" DiskId="$(var.Property_DiskIdCommon)"
+ Source="$(env.PATH_OUT)\bin\sdk\installer\vboxapisetup.py" />
</Component>
- <Directory Id="vboxapi" Name="vboxapi">
- <Component Id="VBoxPyMod" Guid="DF19CB76-5102-11DE-943B-13C755D89593">
- <File Id="__init__.py" Name="__init__.py" DiskId="$(var.Property_DiskIdCommon)" Vital="yes"
- Source="$(env.PATH_OUT)\bin\sdk\installer\vboxapi\__init__.py" />
- <File Id="VirtualBox_constants.py" Name="vbconst.py" LongName="VirtualBox_constants.py" DiskId="$(var.Property_DiskIdCommon)" Vital="yes"
- Source="$(env.PATH_OUT)\bin\sdk\installer\vboxapi\VirtualBox_constants.py" />
+ <Directory Id="dir_SDKVBoxAPI" Name="vboxapi">
+ <Component Id="cp_VBoxPyMod" Guid="DF19CB76-5102-11DE-943B-13C755D89593" Win64="$(var.Property_Win64)">
+ <File Id="file___init__.py" Name="__init__.py" DiskId="$(var.Property_DiskIdCommon)"
+ Source="$(env.PATH_OUT)\bin\sdk\installer\vboxapi\__init__.py" />
+ <File Id="file_VirtualBox_constants.py" Name="VirtualBox_constants.py" DiskId="$(var.Property_DiskIdCommon)"
+ Source="$(env.PATH_OUT)\bin\sdk\installer\vboxapi\VirtualBox_constants.py" />
</Component>
</Directory>
</Directory>
</Directory>
- <!-- Python bindings -->
<?endif?>
<?if $(env.VBOX_WITH_CROGL) = "yes" ?>
- <Component Id="VBoxCROpenGL" Guid="874A1297-835A-491D-8A9D-7E723BC29EE7" Win64="$(var.Property_Win64)">
- <File Id="vboxoglhostcrutil" Name="VbGlHCRU.dll" LongName="VBoxOGLhostcrutil.dll" DiskId="1" Vital="yes"
+ <Component Id="cp_VBoxCROpenGL" Guid="874A1297-835A-491D-8A9D-7E723BC29EE7" Win64="$(var.Property_Win64)">
+ <File Id="file_VBoxOGLhostcrutil.dll" Name="VBoxOGLhostcrutil.dll"
Source="$(env.PATH_OUT)\bin\VBoxOGLhostcrutil.dll" />
- <File Id="vboxoglhosterrorspu" Name="VbGlHers.dll" LongName="VBoxOGLhosterrorspu.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxOGLhosterrorspu.dll" Name="VBoxOGLhosterrorspu.dll"
Source="$(env.PATH_OUT)\bin\VBoxOGLhosterrorspu.dll" />
- <File Id="vboxoglrenderspu" Name="VbGlRndr.dll" LongName="VBoxOGLrenderspu.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxOGLrenderspu.dll" Name="VBoxOGLrenderspu.dll"
Source="$(env.PATH_OUT)\bin\VBoxOGLrenderspu.dll" />
- <File Id="vboxsharedcropengl" Name="VbShCRGL.dll" LongName="VBoxSharedCrOpenGL.dll" DiskId="1" Vital="yes"
+ <File Id="file_VBoxSharedCrOpenGL.dll" Name="VBoxSharedCrOpenGL.dll"
Source="$(env.PATH_OUT)\bin\VBoxSharedCrOpenGL.dll" />
</Component>
<?endif?>
<!-- SDL plugins -->
- <Component Id="VBoxSDLBinaries" Guid="F09D5FD9-E176-42B0-90A9-481BB18B0CB4" Win64="$(var.Property_Win64)">
- <File Id="vboxsdl" Name="VBoxSDL.exe" DiskId="1" Vital="yes"
+ <Component Id="cp_VBoxSDLBinaries" Guid="F09D5FD9-E176-42B0-90A9-481BB18B0CB4" Win64="$(var.Property_Win64)">
+ <File Id="file_VBoxSDL.exe" Name="VBoxSDL.exe"
Source="$(env.PATH_OUT)\bin\VBoxSDL.exe" />
- <File Id="sdldll" Name="SDL.dll" DiskId="1" Vital="yes"
+ <File Id="file_SDL.dll" Name="SDL.dll"
Source="$(env.PATH_OUT)\bin\SDL.dll" />
<?if $(env.VBOX_WITH_SECURELABEL) = "yes" ?>
- <File Id="sdlttfdll" Name="SDL_ttf.dll" DiskId="1" Vital="yes"
+ <File Id="file_SDL_ttf.dll" Name="SDL_ttf.dll"
Source="$(env.PATH_OUT)\bin\SDL_ttf.dll" />
<?endif?>
</Component> <!-- SDL plugins -->
<?if $(env.VBOX_WITH_WEBSERVICES) = "yes" ?>
<!-- Webservice -->
- <Component Id="VBoxWebService" Guid="DD404F04-9874-43E9-AEE2-7762924D922E">
- <File Id="vboxweb" Name="vboxwebs.exe" LongName="vboxwebsrv.exe" DiskId="1" Vital="yes"
+ <Component Id="cp_VBoxWebService" Guid="DD404F04-9874-43E9-AEE2-7762924D922E">
+ <File Id="file_VBoxWebSrv.exe" Name="VBoxWebSrv.exe"
Source="$(env.PATH_OUT)\bin\vboxwebsrv.exe" />
- </Component> <!-- Webservice -->
+ </Component>
<?endif?>
<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
- <!--Python -->
- <Component Id="VBoxPythonBinding" Guid="293D7E11-78DA-4C31-AEED-AE2FE42F6881">
- <Condition>PYTHONINSTALLED</Condition>
- <!-- Nothing in here yet. -->
+ <Component Id="cp_VBoxPythonBinding" Guid="293D7E11-78DA-4C31-AEED-AE2FE42F6881">
+ <Condition>PYTHON_INSTALLED</Condition>
</Component>
<?endif?>
</Directory> <!-- Installation directory -->
</Directory> <!-- Windows program files directory -->
- <!-- Create a subdirectory in the "Programs" start menu -->
- <Directory Id="ProgramMenuFolder" Name="PMenu" LongName="Programs">
- <Directory Id="ProgramMenuDir" Name="vbox" LongName="$(env.VBOX_PRODUCT)" />
+ <!-- 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="DesktopFolder" Name="Desktop"/>
<Directory Id="AppDataFolder" Name="AppData">
- <Directory Id="AppDataMicrosoft" Name="MS" LongName="Microsoft">
- <Directory Id="AppDataMSIE" Name="IE" LongName="Internet Explorer">
- <Directory Id="QuicklaunchFolder" Name="QL" LongName="Quick Launch"/>
+ <Directory Id="dir_AppDataMicrosoft" Name="Microsoft">
+ <Directory Id="dir_AppDataMSIE" Name="Internet Explorer">
+ <Directory Id="dir_QuicklaunchFolder" Name="Quick Launch"/>
</Directory>
</Directory>
</Directory>
- </Directory>
+
+ <!-- Shortcut(s) in start menu -->
+ <Component Id="cp_StartMenuVBox" Guid="C2DC321A-CE63-40EE-8A98-724DF8BD12FB" Win64="$(var.Property_Win64)">
+ <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>
+
+ <Component Id="cp_DesktopShortcut" Guid="668F8A1A-F5CE-48B3-BB1A-3042EE27B279" Win64="$(var.Property_Win64)">
+ <Condition>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>
+
+ <Component Id="cp_QuickLaunchVBox" Guid="CC19E026-938A-41CB-8E77-3F33296244B6" Win64="$(var.Property_Win64)">
+ <CreateFolder/>
+ <Condition>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>
+ </Directory> <!-- TARGETDIR -->
<Feature Id="VBoxApplication" Title="VirtualBox Application" Level="1"
- Description="$(loc.VB_App)"
+ Description="!(loc.VB_App)"
ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand"
Absent="disallow">
- <ComponentRef Id="DesktopShortcut" />
- <ComponentRef Id="QuicklaunchShortcut" />
+ <ComponentRef Id="cp_StartMenuVBox" />
+ <ComponentRef Id="cp_DesktopShortcut" />
+ <ComponentRef Id="cp_QuickLaunchVBox" />
<?if $(env.VBOX_WITH_DOCS_PACKING) = "yes" ?>
- <ComponentRef Id="docs" />
+ <ComponentRef Id="cp_Docs" />
<?endif?>
- <ComponentRef Id="nls" />
- <ComponentRef Id="MainCOM" />
- <ComponentRef Id="MainBinaries" />
+ <ComponentRef Id="cp_NLS" />
+ <ComponentRef Id="cp_MainCOM" />
+ <ComponentRef Id="cp_MainBinaries" />
<?if $(env.VBOX_WITH_QTGUI) = "yes" ?>
- <ComponentRef Id="qtaccessible" />
+ <ComponentRef Id="cp_QtAccessible" />
<?endif?>
<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
- <ComponentRef Id="VBoxPyInst" />
- <ComponentRef Id="VBoxPyMod" />
+ <ComponentRef Id="cp_VBoxPyInst" />
+ <ComponentRef Id="cp_VBoxPyMod" />
<?endif?>
<?if $(env.VBOX_WITH_CROGL) = "yes" ?>
- <ComponentRef Id="VBoxCROpenGL" />
+ <ComponentRef Id="cp_VBoxCROpenGL" />
<?endif?>
- <ComponentRef Id="VBoxSDLBinaries" />
+ <ComponentRef Id="cp_VBoxSDLBinaries" />
<?if $(env.VBOX_WITH_WEBSERVICES) = "yes" ?>
- <ComponentRef Id="VBoxWebService" />
+ <ComponentRef Id="cp_VBoxWebService" />
<?endif?>
- <ComponentRef Id="VBoxDrv" />
+ <ComponentRef Id="cp_VBoxDrv" />
- <Feature Id="VBoxUSB" Title="VirtualBox USB Support" Level="1"
- Description="$(loc.VB_USBDriver)"
+ <Feature Id="ft_VBoxUSB" Title="VirtualBox USB Support" Level="1"
+ Description="!(loc.VB_USBDriver)"
ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
- <ComponentRef Id="USBFilterDriver" />
- <ComponentRef Id="USBDeviceDriver" />
+ <ComponentRef Id="cp_USBFilterDriver" />
+ <ComponentRef Id="cp_USBDeviceDriver" />
</Feature>
<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
- <Feature Id="VBoxNetwork" Title="VirtualBox Networking" Level="1"
- Description="$(loc.VB_Network)"
+ <Feature Id="ft_VBoxNetwork" Title="VirtualBox Networking" Level="1"
+ Description="!(loc.VB_Network)"
ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
- <Feature Id="VBoxNetworkFlt" Title="VirtualBox Bridged Networking" Level="1"
- Description="$(loc.VB_NetFltDriver)"
- ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
- <ComponentRef Id="NetFltDriver" />
+ <Feature Id="ft_VBoxNetworkFlt" Title="VirtualBox Bridged Networking" Level="1"
+ Description="!(loc.VB_NetFltDriver)"
+ ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
+ <ComponentRef Id="cp_NetFltDriver" />
</Feature>
- <Feature Id="VBoxNetworkAdp" Title="VirtualBox Host-Only Networking" Level="1"
- Description="$(loc.VB_NetAdpDriver)"
- ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
- <ComponentRef Id="NetAdpDriver" />
+ <Feature Id="ft_VBoxNetworkAdp" Title="VirtualBox Host-Only Networking" Level="1"
+ Description="!(loc.VB_NetAdpDriver)"
+ ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
+ <ComponentRef Id="cp_NetAdpDriver" />
</Feature>
</Feature>
<?endif?>
<?if $(env.VBOX_WITH_PYTHON) = "yes" ?>
-
- <Feature Id="VBoxPython" Title="VirtualBox Python Support" Level="1"
- Description="$(loc.VB_Python)"
+ <Feature Id="ft_VBoxPython" Title="VirtualBox Python 2.x Support" Level="1"
+ Description="!(loc.VB_Python)"
ConfigurableDirectory="INSTALLDIR" TypicalDefault="install" Display="expand" >
- <ComponentRef Id="VBoxPythonBinding" />
+ <ComponentRef Id="cp_VBoxPythonBinding" />
</Feature>
<?endif?>
@@ -712,30 +750,36 @@
<LaunchConditions After="AppSearch" />
<RemoveExistingProducts After="InstallValidate"><![CDATA[NEWERVERSIONDETECTED OR PREVIOUSVERSIONSINSTALLED]]></RemoveExistingProducts>
- <Custom Action="OriginalTargetDir" After="FileCost"><![CDATA[(NOT INSTALLDIR) AND (NOT EXISTINGINSTALLDIR)]]></Custom>
- <Custom Action="DefaultTargetDir" Before="FileCost" ><![CDATA[NOT Installed AND (NOT INSTALLDIR) AND EXISTINGINSTALLDIR]]></Custom>
+ <Custom Action="ca_OriginalTargetDir" After="FileCost"><![CDATA[(NOT INSTALLDIR) AND (NOT EXISTINGINSTALLDIR)]]></Custom>
+ <Custom Action="ca_DefaultTargetDir" Before="FileCost" ><![CDATA[NOT Installed AND (NOT INSTALLDIR) AND EXISTINGINSTALLDIR]]></Custom>
- <Custom Action="UninstallTAPInstances" Before="InstallFiles" >1</Custom>
+ <Custom Action="ca_UninstallTAPInstances" Before="InstallFiles" >1</Custom>
<?if $(env.VBOX_WITH_NETFLT) = "yes" ?>
- <Custom Action="CreateHostOnlyInterfaceArgs" Before="CreateHostOnlyInterface" ><![CDATA[&VBoxNetworkAdp=3]]></Custom>
- <Custom Action="CreateHostOnlyInterface" Before="InstallFinalize" ><![CDATA[&VBoxNetworkAdp=3]]></Custom>
- <Custom Action="RemoveHostOnlyInterfaces" After="UninstallNetFlt" ></Custom>
-
- <Custom Action="RollbackInstallNetFltArgs" Before="RollbackInstallNetFlt" ><![CDATA[&VBoxNetworkFlt=3]]></Custom>
- <Custom Action="RollbackInstallNetFlt" Before="InstallNetFlt" ><![CDATA[&VBoxNetworkFlt=3]]></Custom>
- <Custom Action="InstallNetFltArgs" Before="InstallNetFlt" ><![CDATA[&VBoxNetworkFlt=3]]></Custom>
- <Custom Action="InstallNetFlt" Before="CreateHostOnlyInterface" ><![CDATA[&VBoxNetworkFlt=3]]></Custom>
-
- <Custom Action="RollbackUninstallNetFltArgs" Before="RollbackUninstallNetFlt" ><![CDATA[&VBoxNetworkFlt=2]]></Custom>
- <Custom Action="RollbackUninstallNetFlt" Before="UninstallNetFlt" ><![CDATA[&VBoxNetworkFlt=2]]></Custom>
- <Custom Action="UninstallNetFltArgs" Before="UninstallNetFlt" ><![CDATA[&VBoxNetworkFlt=2]]></Custom>
- <Custom Action="UninstallNetFlt" After="InstallInitialize" ><![CDATA[&VBoxNetworkFlt=2]]></Custom>
+ <Custom Action="ca_CreateHostOnlyInterfaceArgs" Before="ca_CreateHostOnlyInterface" ><![CDATA[&ft_VBoxNetworkAdp=3]]></Custom>
+ <Custom Action="ca_CreateHostOnlyInterface" Before="InstallFinalize" ><![CDATA[&ft_VBoxNetworkAdp=3]]></Custom>
+ <Custom Action="ca_RemoveHostOnlyInterfaces" After="ca_UninstallNetFlt" ></Custom>
+
+ <Custom Action="ca_RollbackInstallNetFltArgs" Before="ca_RollbackInstallNetFlt" ><![CDATA[&ft_VBoxNetworkFlt=3]]></Custom>
+ <Custom Action="ca_RollbackInstallNetFlt" Before="ca_InstallNetFlt" ><![CDATA[&ft_VBoxNetworkFlt=3]]></Custom>
+ <Custom Action="ca_InstallNetFltArgs" Before="ca_InstallNetFlt" ><![CDATA[&ft_VBoxNetworkFlt=3]]></Custom>
+ <Custom Action="ca_InstallNetFlt" Before="ca_CreateHostOnlyInterface" ><![CDATA[&ft_VBoxNetworkFlt=3]]></Custom>
+
+ <Custom Action="ca_RollbackUninstallNetFltArgs" Before="ca_RollbackUninstallNetFlt" ><![CDATA[&ft_VBoxNetworkFlt=2]]></Custom>
+ <Custom Action="ca_RollbackUninstallNetFlt" Before="ca_UninstallNetFlt" ><![CDATA[&ft_VBoxNetworkFlt=2]]></Custom>
+ <Custom Action="ca_UninstallNetFltArgs" Before="ca_UninstallNetFlt" ><![CDATA[&ft_VBoxNetworkFlt=2]]></Custom>
+ <Custom Action="ca_UninstallNetFlt" After="InstallInitialize" ><![CDATA[&ft_VBoxNetworkFlt=2]]></Custom>
<?endif?>
- <Custom Action="InstallPythonAPI" After="InstallFinalize" ><![CDATA[&VBoxPython=3]]></Custom>
- <Custom Action="InstallBranding" After="InstallFinalize" ><![CDATA[NOT REMOVE]]></Custom>
- <Custom Action="UninstallBranding" After="InstallFinalize" ><![CDATA[REMOVE]]></Custom>
+ <Custom Action="ca_InstallPythonAPIArgs" Before="ca_InstallPythonAPI" ><![CDATA[&ft_VBoxPython=3]]></Custom>
+ <Custom Action="ca_InstallPythonAPI" Before="InstallFinalize" ><![CDATA[&ft_VBoxPython=3]]></Custom>
+
+ <Custom Action="ca_InstallBrandingArgs" Before="ca_InstallBranding" ><![CDATA[NOT REMOVE]]></Custom>
+ <Custom Action="ca_InstallBranding" Before="InstallFinalize" ><![CDATA[NOT REMOVE]]></Custom>
+
+ <Custom Action="ca_UninstallBrandingArgs" Before="ca_UninstallBranding" ><![CDATA[REMOVE]]></Custom>
+ <Custom Action="ca_UninstallBranding" Before="InstallFinalize" ><![CDATA[REMOVE]]></Custom>
</InstallExecuteSequence>
</Product>
</Wix>
+
diff --git a/src/VBox/Installer/win/VirtualBox_TypeLib.xsl b/src/VBox/Installer/win/VirtualBox_TypeLib.xsl
index 30608baa1..86a11adde 100644
--- a/src/VBox/Installer/win/VirtualBox_TypeLib.xsl
+++ b/src/VBox/Installer/win/VirtualBox_TypeLib.xsl
@@ -58,6 +58,9 @@
<Include>
<TypeLib>
<xsl:attribute name="Id"><xsl:value-of select="@uuid"/></xsl:attribute>
+ <xsl:attribute name="Advertise">yes</xsl:attribute>
+ <xsl:attribute name="MajorVersion">1</xsl:attribute>
+ <xsl:attribute name="MinorVersion">0</xsl:attribute>
<xsl:attribute name="Language">0</xsl:attribute>
<xsl:attribute name="Description"><xsl:value-of select="@desc"/></xsl:attribute>
<AppId>
diff --git a/src/VBox/Installer/win/dep.sed b/src/VBox/Installer/win/dep.sed
index d312386ac..0e349152c 100644
--- a/src/VBox/Installer/win/dep.sed
+++ b/src/VBox/Installer/win/dep.sed
@@ -1,10 +1,10 @@
-# $Id: dep.sed $
+# $Id: dep.sed 37289 2011-06-01 11:59:23Z vboxsync $
## @file
# Generate dependencies from .wxs and .wxi sources.
#
#
-# Copyright (C) 2006-2010 Oracle Corporation
+# Copyright (C) 2006-2011 Oracle Corporation
#
# This file is part of VirtualBox Open Source Edition (OSE), as
# available from http://www.virtualbox.org. This file is free software;
@@ -16,9 +16,9 @@
#
# drop all lines not including a src property.
-/src=\"/!d
+/Source=\"/!d
# extract the file spec
-s/^.*src="\([^"]*\).*$/\1 /
+s/^.*Source="\([^"]*\).*$/\1 /
# convert to unix slashes
s/\\/\//g
# $(env.PATH_OUT stuff.