I appear to be looking at the same problem. I was able to reproduce it by hitting 'cancel' near the end of an uninstall and letting it rollback. After that uninstallation failed. Performing a repair fixed things. Did you email the difx team at the email address Quinton suggested, and if so, did you ever hear anything back.
Thanks, Rob On 10/12/2010 20:37, James Johnston wrote: > 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 ------------------------------------------------------------------------------ Colocation vs. Managed Hosting A question and answer guide to determining the best fit for your organization - today and in the future. http://p.sf.net/sfu/internap-sfd2d _______________________________________________ WiX-users mailing list WiX-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wix-users