0

Our application is installed using a WiX bootstrapper. Consequently, the Windows 10 Apps and Features list (a.k.a. ARP) shows an entry for the bundle, and another entry for the .msi which is contained within it.

On my system, I have OurApp v.9.0 installed, as well as v.9.1 Beta. When I install the upgrade, v.9.1 Full Release, it is seen as an upgrade to v.9.0, which is automatically uninstalled. v.9.1 Beta is also uninstalled by use of the following code:

<!-- Uninstall Beta Version [only use this for Full Release] -->
<?if Not $(var.Phase) = "Beta" ?>
    <Upgrade Id='233E450E-182F-4823-9C24-2F28A93A52A8'>
      <UpgradeVersion OnlyDetect='no' Property='OLDINSTALLER' Minimum='0.0.0' />
    </Upgrade>
<?endif?>

Unfortunately, the entry for OurApp 9.1 Beta bundle is sometimes left behind in the ARP list after uninstalling. (The OurApp 9.1 Beta .msi package was successfully removed from the ARP list.) If I try to uninstall the Beta bundle again, it simply disappears without really doing anything. Usually, uninstalling the app from ARP will cause some uninstallation dialogs to appear, but in this case, they don't appear, the entry is simply removed from ARP.

I have looked at the following posts for guidance:

WiX upgrade didn't remove the earlier product from ARP

MSI uninstall does not remove product entry in program features

After using msiexec to uninstall a program it remains in the control panel (add/remove programs)

Unfortunately, these don't seem to be describing quite the same situation as I'm seeing, and I don't understand the suggestions well enough to determine what to do in our case. I did happen to see this comment:

"Duplicate installations are very common in such cases as a by-product of rapid test cycles."

Since "rapid test cycles" would describe well our situation, I'm wondering if this might be the case for us. However, I have 2 difficulties:

  1. I don't understand how to confirm that this is happening or what to do about it.

  2. I get the impression that this would be unlikely to occur on an end-user's system, since they are not participating in these "rapid test cycles". Do we actually need to do anything?

I would appreciate any input / advice on dealing with this situation.


UPDATE: Here is the WiX code for building our bundle:

<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
     xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
     xmlns:dep="http://schemas.microsoft.com/wix/DependencyExtension">
  <Bundle
      Name='UsefulApp $(var.TruncatedVersion) $(var.Phase)'
      Version='$(var.VersionNumber)'
      UpgradeCode='$(var.UpgradeCode)'
      Tag='UsefulFrmwrkBndl'
      IconSourceFile='$(var.UsefulInstallIcon)'
      Copyright="Copyright ©$(var.CurrentYear), $(var.ProducedBy). All Rights Reserved."
      Manufacturer='$(var.ProducedBy)'>

    <bal:Condition Message="32-bit Windows is no longer supported."> (VersionNT64 &gt;= v6.0) </bal:Condition>

    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense">
      <Payload SourceFile="UsefulLicense.htm" />
    </BootstrapperApplicationRef>

    <!--<RelatedBundle Id='$(var.UpgradeCode)' Action='Detect'/>-->

    <WixVariable Id="WixStdbaLicenseUrl" Value="UsefulLicense.htm" />
    <WixVariable Id="WixStdbaLogo" Value=".\resources\image_option_1.bmp" />
    <WixVariable Id="WixStdbaThemeXml" Value="UsefulHyperlinkTheme.xml" />
    <WixVariable Id="WixStdbaThemeWxl" Value="UsefulHyperlinkTheme.wxl" />

    <Chain>
      <PackageGroupRef Id="NetFx48" />
      <PackageGroupRef Id="redist_vc14" />
      <RollbackBoundary />
      <PackageGroupRef Id='UsefulFrameworkPackGroup'/>
    </Chain>
  </Bundle>

  <Fragment Id='UsefulFrag'>
    <PackageGroup Id='UsefulFrameworkPackGroup'>
      <MsiPackage Id='UsefulMsiPack'
        DisplayName='UsefulApp $(var.VersionNumber)'
        DisplayInternalUI='yes'
        ForcePerMachine='yes'
        InstallCondition='1'
        SourceFile='UsefulApp_$(var.VersionNumber)_Installer.msi'
        Visible='yes'
        Vital='yes'>
      </MsiPackage>
    </PackageGroup>

    <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
      Value="Version" Variable="Netfx48FullVersion" />
    <util:RegistrySearch Root="HKLM" Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
      Value="Version" Variable="Netfx48x64FullVersion" Win64="yes" />
  </Fragment>
</Wix>
Todd Hoatson
  • 123
  • 2
  • 18
  • Four quick questions: 1) do you want two entries (one for the MSI and another for the bundle) in ARP? Usually people want just one, which should be just the bundle. 2) what does your bundle authoring look like? 3) what does the bundle's log look like for each of those operations? 4) are you running remove on the MSI, perchance? – B. Murri Dec 30 '20 at 19:43
  • In response: 1) I want 1 entry, but my seniors want 2 2) if, by 'bundle authoring', you mean bundle code, see the updated information above. 3) is there something specific I should be looking for? (there's lots of stuff in these files) 4) I don't believe so. – Todd Hoatson Jan 06 '21 at 19:47
  • When building your bundles, does the `UpgradeCode` value you provide change between the three versions you mention? – B. Murri Jan 28 '21 at 07:13

0 Answers0