This is all good information, but I want to get back to the original question
at hand for future onlookers seeking a solution (or understanding of their
problem).

The logical containers are as follows:

A bundle consisting of several .msi packages.  Each package has upgrade
rules that in this case are specified by the MajorUpgraded element.  The
scheduling of the upgrade is specified by the "schedule" attribute.  You can
read more about the schedule order here:<br/> 
http://wixtoolset.org/documentation/manual/v3/xsd/wix/majorupgrade.html
<http://wixtoolset.org/documentation/manual/v3/xsd/wix/majorupgrade.html> 
<br/>

The bundle itself also has upgrade features.  Typically speaking the bundle
is a custom bootstrapper application and it is the only thing I am allowing
to show up in add/remove programs.  I specifically disallow each of the .msi
packages from creating entries in add/remove programs.  Upgrades require
that the first three digits of the dotted-quad evaluate to a larger value
than the previous installation.

For major upgrades to work with msi packages it's suitable to specify the
Product Id="*" such that it's unique per build, and you must keep the
UpgradeCode the same for the lifecycle of the software that you want to
maintain upgrades for.  Also note that perUser cannot update perMachine and
visaversa.

The original question was based on the observation that the default behavior
for an upgrade to one of the msi packages within an bundle (new msi version
AND bundle version) is to schedule the RemoveExistingProducts
afterInstallValidate.  When it does this the documentation says that
scheduling removes the installed product entirely before installing the
upgrade product.  However, that is NOT what I am observing in the logs. 
What I am seeing is that it installs the new version then following
successful installation removes the old version.  My msi package being
upgraded installs a new driver that is currently loaded.  The observed
default behavior was installing the new driver files, then uninstalling the
device (which leads to subdevices being removed).  This requires a reboot at
which point the driver files exist and the enumeration process of the
subdevices does not take place.  In order for that process to take place a
the order needs to be uninstall/install.  I was asking how to force that to
happen.

For future readers of this post I would suggest changing the schedule of
RemoveExistingProducts and checking the log file to make sure you are
getting what you need.  For my case, the order that made the PnP manager
happy was to schedule afterInstallExecute.  This works because the
installation happens over top of any existing installation and does not
require that the device goes through the removal process.



--
View this message in context: 
http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Force-a-MajorUpgrade-to-do-complete-uninstall-BEFORE-new-install-tp7597686p7597720.html
Sent from the wix-users mailing list archive at Nabble.com.

------------------------------------------------------------------------------
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to