Seeing as how this seems to be a fundamental problem with DIFxApp not
handling all the upgrade possibilities well, I was curious to see how other
products do things and so I ripped apart some MSIs in Orca.  I was looking
to see if DIFxApp was set up the same way (CustomAction table).  I also
inspected the placement of the RemoveExistingProducts action since after my
previous e-mail I believe that this plays a critical role in whether this
corrupted system state may occur.  Since I haven't seen any other indication
or documentation on the Internet (a Google search for RemoveExistingProducts
and DIFxApp reveals little), I thought it would be useful to report my
findings so others can see what some commercial software is doing.  My
findings:

All products using DIFxApp place MsiProcessDrivers and MsiCleanupOnSuccess
actions in the normal places.  CustomAction types are always the same.  I
identified the program used to compile the MSI by looking at the self-named
custom actions each install tool tends to create (e.g. InstallShield has its
own DLL with tons of custom actions).

Refer to
http://jpassing.com/2007/06/16/where-to-place-removeexistingproducts-in-a-ma
jor-msi-upgrade/ to better understand the placement of
RemoveExistingProducts action.  Examining this table leads me to believe
that placement between InstallInitialize and InstallFinalize is the best
place, since a canceled setup will always leave the old version on the
computer, no matter what.  But this doesn't seem to work with DIFxApp due to
its bug, as previously noted.

My product (with the rollback problem):  Compiled with WiX and uses DIFxApp.
RemoveExistingProducts is placed after InstallInitialize.  According to the
previous link, a failure at any time (uninstall or reinstall) results in
only the old version remaining: leaving system state exactly as it was
found.  Unfortunately, as previously noted, a bug in DIFxApp prevents this
from happening.

Apple Mobile Device Support (included with iTunes; presumably their iPod
drivers, etc.).  Compiled with WiX and uses DIFxApp.  RemoveExistingProducts
is placed after InstallFinalize.  Probably the DIFxApp bug is not a problem
here, because the new version is installed before the old version is
uninstalled.  An error in the new version setup (from DIFx or other source)
would still leave the old version and its drivers untouched.  An error in
the old version uninstall would leave the new version & its drivers
untouched.  According to the table at the above link, the pitfall is that if
the uninstall fails, then BOTH versions of the product remain installed on
the computer.  This seems like a very inconsistent, illogical state to be
in; I can imagine that there could be some issues with a lot of products
(including mine) if this were to happen.  (Perhaps an MSI expert can
convince me otherwise?  Otherwise, I wonder if Apple's software can get
itself in a bad way if I click Cancel at just the right moment.) 

Microsoft LifeCam (webcam driver).  Don't know what compiled this; I didn't
see any obvious indications.  It uses DIFxApp.  RemoveExistingProducts is
placed after InstallInitialize.  It therefore appears to be in a very
similar configuration as with my product, and I believe it would leave the
user's DIFxApp state inconsistent if the upgrade was canceled at just the
right moment.  It is interesting to note that the MSI file is wrapped by a
bootstrapper: the MSI itself throws no UI.  The bootstrapper does NOT
present the user with a Cancel button.  Perhaps this is a reason why?

Oracle VirtualBox (virtual network drivers).  Compiled with WiX and uses
DIFxApp.  RemoveExistingProducts is placed between InstallValidate and
InstallInitialize.  This seems like the best place to put it.  Uninstall
happens first, so there's no possibility of having both versions at the same
time.  If the uninstall fails, then the old version remains.  If the install
fails, then nothing remains on the computer (i.e. the old version is not
reinstalled).  I don't see how this DIFxApp bug would be a problem in this
scenario since the old version isn't reinstalled.

Western Digital SmartWare (some proprietary driver for external hard drive).
Compiled with Advanced Installer and uses DIFxApp.  RemoveExistingProducts
is placed between InstallValidate and InstallInitialize, like with
VirtualBox.

HP OfficeJet 8500.  Compiled with WiX.  RemoveExistingProducts is placed
after InstallInitialize so I suspect their installer has the same bug.

Intel Network Connections driver, MS Virtual PC 2007, and VMware Workstation
7:  these products use Windows Installer but have proprietary, non-DIFxApp
custom actions for installing drivers.

Logitech webcam driver, Dell V310 printer driver, NVIDIA graphics drivers,
ATI Radeon graphics driver, Intel HD graphics driver, Intel DH55HC drivers,
Intel HD Audio drivers:  these products did not appear to use Windows
Installer for installing the drivers.  (Some drivers had MSI files for
helper/utility programs but did not have the MsiDriverPackages table so I
conclude they do something else).

Best regards,

James Johnston

-----Original Message-----
From: Quinton Tormanen [mailto:quint...@deltamotion.com] 
Sent: Friday, December 10, 2010 17:53
To: General discussion for Windows Installer XML toolset.
Subject: Re: [WiX-users] DIFxApp does not properly rollback to the old
driverwhen doing a major upgrade

Thanks for digging into this further. The support e-mail for DIFx Tools is
difxt...@microsoft.com. I have received responses over the years from
different people, but never any resolution to my problems. If that e-mail
address is no longer valid, then I can give you the addresses of the
specific people that replied. Please keep me posted on what you find out.

--Quinton

-----Original Message-----
From: James Johnston [mailto:johnst...@inn-soft.com]
Sent: Thursday, December 09, 2010 3:46 PM
To: wix-users@lists.sourceforge.net
Subject: [WiX-users] DIFxApp does not properly rollback to the old
driverwhen doing a major upgrade

> Hi,
> 
> As some of you have probably noticed, there has been some discussion 
> recently regarding problems with DIFxApp causing rollbacks.  I did
some more
> investigation and was able to reliably reproduce the issue and come up
with
> a very good idea on what is causing the problem.  All investigation
was done
> with the version of DIFxApp included with Windows DDK version
7600.16385.1;
> note that this will also reproduce with the version included with WiX
3.0 /
> 3.5.  It was done on a clean Windows XP SP2 virtual machine with .NET 
> Framework 2.0; however we have observed the same problems on Windows
7.
>
> As far as I can tell, this is a bug in the DIFxApp DLLs and/or the WiX 
> extension for DIFxApp.  If anyone knows some good workarounds, or how
to
> report this to the proper channels and get it fixed it would be much 
> appreciated!  From what I can tell, there exist situations in any
DIFxApp
> setup program doing an upgrade where if the user cancels the setup at
a
> certain point (or there is an error in the installation of the new
product)
> then the user's system will be hosed and they would be unable to
uninstall
> the product without some involved technical support.
>
> If the bug can't be fixed or worked around, I don't see how DIFxApp is 
> suitable for use in a commercial product that needs to support
upgrades
> (i.e. all products).  And since DIFxApp isn't open source, I can't go
in and
> just fix the problem.  Very frustrating! 
>
> ...

----------------------------------------------------------------------------
--
Oracle to DB2 Conversion Guide: Learn learn about native support for PL/SQL,
new data types, scalar functions, improved concurrency, built-in packages,
OCI, SQL*Plus, data movement tools, best practices and more.
http://p.sf.net/sfu/oracle-sfdev2dev
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users


------------------------------------------------------------------------------
Oracle to DB2 Conversion Guide: Learn learn about native support for PL/SQL,
new data types, scalar functions, improved concurrency, built-in packages, 
OCI, SQL*Plus, data movement tools, best practices and more.
http://p.sf.net/sfu/oracle-sfdev2dev 
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to