0

I have two Wix projects - one that creates the MSI and the other that bootstraps it into an exe.

Using the exe, I can install the application with no issues, but when I try to uninstall the application, I get my installer's setup menu again and it attempts to install itself again.

If I cancel the re-install, and attempt to uninstall again, it works as expected.

If I perform the same workflow with the msi, it works as expected.

Here's what my bootstrapper looks like:

<Bundle Name="name" Version="2.0.0.0" Manufacturer="company" UpgradeCode="guid" IconSourceFile="icon.ico" DisableModify="yes">

    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
        <bal:WixStandardBootstrapperApplication LicenseFile="license.rtf" SuppressOptionsUI="yes" SuppressRepair="yes" />
    </BootstrapperApplicationRef>

<Chain>
  <MsiPackage SourceFile="application.msi" DisplayInternalUI="yes" EnableFeatureSelection="yes"/>
</Chain>
</Bundle>

Any ideas?

Update

As per suggestions, I've modified my bundle to the following (set EnableFeatureSelection to no), but it's still showing the same behavior.

<Bundle Name="name" Version="2.0.0.0" Manufacturer="company" UpgradeCode="guid" IconSourceFile="icon.ico" DisableModify="yes">

    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
        <bal:WixStandardBootstrapperApplication LicenseFile="license.rtf" SuppressOptionsUI="yes" SuppressRepair="yes" />
    </BootstrapperApplicationRef>

<Chain>
  <MsiPackage SourceFile="application.msi" DisplayInternalUI="yes" EnableFeatureSelection="no"/>
</Chain>
</Bundle>

Update #2

I noticed that when I uninstall for the first time and it launches the install setup, if I cancel the setup, it fails, but it has already removed all the files and registry keys. Running the uninstall the second time removes the entry from the Add/Remove programs (successfully).

Update #3

Here's the UI sequence for the msi

<UI>
  <DialogRef Id="WelcomeDlg"/>
  <DialogRef Id="LicenseAgreementDlg"/>
  <DialogRef Id="VerifyReadyDlg"/>
  <DialogRef Id="ErrorDlg" />
  <DialogRef Id="FatalError" />
  <DialogRef Id="FilesInUse" />
  <DialogRef Id="UserExit" />
  <DialogRef Id="SelectDbDlg" />

  <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg"></Publish>
  <Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">NOT Installed</Publish>
  <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="SelectDbDlg">NOT Installed</Publish>
  <Publish Dialog="SelectDbDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">NOT Installed</Publish>
  <Publish Dialog="SelectDbDlg" Control="Next" Event="NewDialog" Value="DbCreateCredDlg">NOT Installed</Publish>
  <Publish Dialog="DbCreateCredDlg" Control="Back" Event="NewDialog" Value="SelectDbDlg">NOT Installed</Publish>
  <Publish Dialog="DbCreateCredDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg">NOT Installed</Publish>

  <Publish Dialog="SetupTypeDlg" Control="Back" Event="NewDialog" Value="DbCreateCredDlg">NOT Installed</Publish>
  <Publish Dialog="SetupTypeDlg" Control="Next" Event="NewDialog" Value="FeaturesDlg">NOT Installed</Publish>
  <Publish Dialog="SetupTypeDlg" Control="CustomButton" Event="NewDialog" Value="FeaturesDlg">NOT Installed</Publish>
  <Publish Dialog="SetupTypeDlg" Control="TypicalButton" Event="NewDialog" Value="VerifyReadyDlg">NOT Installed</Publish>
  <Publish Dialog="SetupTypeDlg" Control="CompleteButton" Event="NewDialog" Value="VerifyReadyDlg">NOT Installed</Publish>

  <Publish Dialog="FeaturesDlg" Control="Back" Event="NewDialog" Value="SetupTypeDlg">NOT Installed</Publish>

  <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="SetupTypeDlg">NOT Installed</Publish>
  <Publish Dialog="ExitDialog" Control="Back" Event="EndDialog" Value="VerifyReadyDlg">1</Publish>
  <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
</UI>
MrAppa
  • 221
  • 3
  • 9
  • EnableFeatureSelection YesNoType Specifies whether the bundle will allow individual control over the installation state of Features inside the msi package. Managing feature selection requires special care to ensure the install, modify, update and uninstall behavior of the package is always correct. The default is "no". – Isaiah4110 Oct 16 '14 at 15:40
  • for testing sake, change the attibute "EnableFeatureSelection" to NO and see if it is working fine. – Isaiah4110 Oct 16 '14 at 15:41
  • Updated the original post to reflect changing the bundle. – MrAppa Oct 16 '14 at 15:53

3 Answers3

2

This sounds like there is an issue with the MSI. Since you have DisplayInternalUI="yes", the UI belonging to the MSI is what you see when the application is being added or removed. My guess is that there is some issue with the order in which the MSI install dialogs are being displayed, or with the conditions on which the MaintenanceTypeDlg dialog is displayed. Without seeing the options set on the MSI, or the publish order for the UI dialogs and the conditions under which they are displayed it is hard to say where the problem lies specifically. An example of what your UI fragment for the MSI looks like would help further diagnose if this is the issue.

----Edit----

As I expected the only path for your UI to follow is the install path, and the condition on the WelcomeDlg element forces it down that path. To fix this, remove the current WelcomeDlg and replace with the following two lines:

<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg">NOT Installed AND NOT PATCH</Publish>
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>

This will use the bootstrapers welcome screen to determine if the user wants to uninstall and, since there is no Installed condition to publish the VerifyReadyDlg, skip right to the unistallation without publishing any of the MSI's UI dialogs. This appears to be what you are looking to do, however, if you did want to set a sequence of dialogs in the MSI to guide the user through the uninstall, you could add those dialogs here.

  • Updated the question with the UI information for the msi. – MrAppa Oct 20 '14 at 11:57
  • Switching out the WelcomeDlg lines did not fix the issue. However, here is what seems to be happening. When I uninstall the program, the typical uninstaller sequence is happening (which seems to be removing files). However, after the files are removed, the setup screen of the MSI is being called again. And now the files are gone so it thinks it's an install. – MrAppa Oct 20 '14 at 15:33
2

After a couple more days of poking at it, I found the problem and it was due to the MSI throwing an error upon uninstall (silently). I have some custom actions defined, but I did not have them set to run only upon install.

So I had this before:

<InstallExecuteSequence>
  <Custom Action="ServerName.Set" Before="AdjustConfigurationFile"/>
  <Custom Action="AdjustConfigurationFile" Before="InstallFinalize"/>
  <Custom Action="CreateDatabase" After="InstallFinalize"/>
</InstallExecuteSequence>

Upon uninstall though, the custom action would run to adjust the configuration file (which would fail becaue the file no longer exisited) which would cause the application to rollback, which would cause the installer to run again.

Changing the Install sequence to the following fixes this issue:

<InstallExecuteSequence>
  <Custom Action="ServerName.Set" Before="AdjustConfigurationFile">NOT Installed</Custom>
  <Custom Action="AdjustConfigurationFile" Before="InstallFinalize">NOT Installed</Custom>
  <Custom Action="CreateDatabase" After="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>

The takeaway here is that if you're uninstalling the bootstrapper and the installer UI shows up again, THE MSI THREW AN ERROR and you should double check that logic.

MrAppa
  • 221
  • 3
  • 9
0

Add to your MsiPackage element InstallCondition attribute with NOT Installed. If you want run install on upgrade then ypu have to add or UPGRADINGPRODUCTCODE.

Buzka91
  • 399
  • 1
  • 14