Wix Toolset: Skip success dialog in StdBA - wix

I am using WixStandardBootstrapperApplication in bundle
It will install .NET 4.8 and one MSI package, Can find code below,
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense">
<bal:WixStandardBootstrapperApplication
ThemeFile="theme.xml"
SuppressOptionsUI="yes"
LicenseUrl=""/>
</BootstrapperApplicationRef>
<Chain DisableRollback="yes">
<PackageGroupRef Id="NetFx48Web"/>
<MsiPackage Id="myMBS"
SourceFile="$(var.Mbs.Updater.TargetPath)"
DisplayInternalUI="yes"/>
</Chain>
Inside that MSI package we have Custom Action to LaunchApplication after InstallFinalize
<InstallExecuteSequence>
<Custom Action="LaunchApplication" After="InstallFinalize" />
</InstallExecuteSequence>
So we don't need to StdBAs bundle to show Success Dialog, How to skip that
I have researched but didint find any workable solution

The WixInternalUIBootstrapperApplication was added in v4.0-preview.1 for this scenario where the bundle has 0-n prerequisites and one main MSI. If the prereqs don't need to be installed then only the splash screen and MSI UI will be shown. Otherwise, the prereq BA shows its UI while installing the prereqs and then closes before showing the MSI UI.

I conclude it is not possible in StdBA
The default UI dialog will come throughout the installation process in StdBA. So skipping the page is not possible yet. Still if needed means then custom BA will help achieve that. I am not tried it yet
Supporting link
https://stackoverflow.com/a/43522884/7013033

More common would be to provide the user an option wether to start the application or not after successful installation of all packages. This could be done by the WixStandardBootstrapperApplication build in property LaunchTarget. Then you could also remove the custom action from the msi installer.
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkLicense">
<bal:WixStandardBootstrapperApplication
ThemeFile="theme.xml"
SuppressOptionsUI="yes"
LicenseUrl=""
LaunchTarget="{YOURAPPLICATIONPATH}"/>
</BootstrapperApplicationRef>
<Chain DisableRollback="yes">
<PackageGroupRef Id="NetFx48Web"/>
<MsiPackage Id="myMBS"
SourceFile="$(var.Mbs.Updater.TargetPath)"
DisplayInternalUI="yes"/>
</Chain>
Documentation https://wixtoolset.org/documentation/manual/v3/xsd/bal/wixstandardbootstrapperapplication.html

Related

Set MsiPackage's as features

I am creating a Wix Installer with wix bootstrapper. Wix setup project gives you the possibility to determine which features to install and which not. I am looking the same thing for MsiPackages on bootstrapper, so I can select which msi packages to install.
<Chain>
<!-- TODO: Define the list of chained packages. -->
<!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
<MsiPackage SourceFile="..\APP1\Wix1WindowsFormsApplication1.msi"/>
<MsiPackage SourceFile="..\APP2\Wix2WindowsFormApplication2.msi"/>
</Chain>
This can be done in a custom bootstrapper application in which you have PlanPackageBegin event where you can select which msi packages to install. But this is not easy.
With standard bootstrapper application there is a very limited capability to define checkboxes on the Options dialog and use selection of checkboxes to select which packages to install, as discussed here: http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Bootstrapper-Custom-UI-Checkbox-to-customize-install-td7596905.html

WiX Burn: Reading LaunchTarget from Registry

I'm new with WiX, and I'm trying to have my Bootstrapper launch my installed application when it completes. To accomplish this, I'm using
<Variable Name="LaunchTarget" Value="path_to_exe"/>
However, it is not easy for me to get the path to the executable. The reason for this is because I'm using <Chain> to install some pre-requisites and then an msi that actually installs my exe.
So to do this, the msi is writting the path to a known location in the registry, and then the bootstrapper reads it and uses it.
The problem is that when the bootstrapper reads the registry, the msi hasn't run yet, so it is unable to run the executable at the end.
Here's my WiX, if it helps:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<Bundle Name="My Installation" UpgradeCode="a8964402-f3fc-4878-aafd-31ecda6b685e" Version="1.0.0.0">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication LicenseFile="EULA.rtf"
ThemeFile="theme.xml"
SuppressOptionsUI="yes" />
</BootstrapperApplicationRef>
<Chain>
<PackageGroupRef Id="NetFx40Redist"/>
<ExePackage Id="OpenSSL" SourceFile="pre-requesite.exe" />
<MsiPackage Id="myInstall" SourceFile="mySetup.msi" />
</Chain>
<util:RegistrySearch Root="HKLM"
Key="Software\myProgram"
Value="myEXEPath"
Variable="myEXEPath"
Result="value"
Format="raw" />
<Variable Name="LaunchTarget" Value="[myEXEPath]"/>
</Bundle>
</Wix>
So, in short, I'm trying to have the RegistrySearch run AFTER the MsiPackage installs. Can this be done? If not, what alternatives do I have?
As I side note, if I manually fill in the registry value before installation, everything works fine. This means that besides the order things are running in, everything is working fine.
RegistrySearches run during the Detect operation. Custom BAs could run Detect after Apply, but that's not really an option since you're using the WixStandardBootstrapperApplication.
Lucky for you, WiX v3.9 added support for running the LaunchTarget already elevated, with the requirement that the path to the target .exe be in the registry under HKLM. So you would do this:
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication LicenseFile="EULA.rtf"
ThemeFile="theme.xml"
SuppressOptionsUI="yes"
LaunchTargetElevatedId="MyAEEId" />
</BootstrapperApplicationRef>
<ApprovedExeForElevation Id="MyAEEId"
Key="Software\myProgram" Value="myEXEPath" />
Edit:
It looks like you are required to set LaunchTarget as well. Why doesn't your bundle know where it will be? You can just put in gibberish for LaunchTarget (WixStdBA will try the registry location first), but can't you use built-in variables and/or MsiProperty elements to locate the exe?

Bootstrapper exe does not use uninstall of msi

I have added custom dialog in msi that allows to uninstall user's files. If I install msi everything works perfect when uninstalling and i can see my custom dialog window. But if i install my app through bundle.exe (bundle installs framework if needed and msi itself), during uninstalling it makes silent uninstall (just drop files) and no dialog window I can see. What problem can it be and how to solve it? It is really important for me, because end user will use bundle. Waiting for your answer...
Here is bundle
<Bundle Name="$(var.ProductName)" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication LicenseFile="License.rtf"/>
</BootstrapperApplicationRef>
<Chain>
<!-- TODO: Define the list of chained packages. -->
<PackageGroupRef Id="NetFx40Redist"/>
<MsiPackage Id="Synchronizer" SourceFile="$(var.Installer.TargetPath)" DisplayInternalUI="yes" After="NetFx40Redist" />
</Chain>

How to display a specific text on successfull uninstallation

I'm creating a setup.exe bundle for my msi with WIX.
I have a Msi which installs my application. This app depends on a number of other packages.
So I created a bundle which installs the Msi and these packages.
To specify how should setup's wizard pages be displayed I use some Theme.xml.
But I can not find out how to show different Text on Success Page in case of installation and uninstallation (e.g. "The app was successfully installed"/ "The app was successfully removed")
Thanks.
You have to change the message in theme.wxl file which is pointed by LocalizationFile attribute.
<Bundle ...
.............
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication
LicenseUrl=""
LogoFile="Logo.png"
SuppressOptionsUI="yes"
LocalizationFile="Theme.wxl"
ThemeFile="Theme.xml"/>
</BootstrapperApplicationRef>
........
</Bundle>

WiX bootstrapper that only shows the package Dialogs or atleast one that doesn't require the license approval

I have a project that I am creating an installer for. I have the msi created that will do the install but I also need to install some pre-reqs (.NET 4.0 and VSTO client tools or whatever they are called)
From what I can tell I need to use a bootstrapper and while it seems to work I really don't want the default dialogs that make me approve the license. I would like to skip that completely. (If I could hide the bootstrapper that would be fine but just having an "Install" button without the EULA would be ok).
Here is the xml I am currently using.
<?xml version="1.0" encoding="UTF-8"?>
<WixVariable Id="WixStdbaLogo" Value="logo.png" />
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
</BootstrapperApplicationRef>
<Chain>
<!-- TODO: Define the list of chained packages. -->
<PackageGroupRef Id="NetFx40Web"/>
<MsiPackage SourceFile="TestRibbonLocationInstaller.msi" DisplayInternalUI="yes" />
</Chain>
</Bundle>
So from what I can tell I need to basically create a custom bootstrap application for this that I then reference as the bootstrapperapplication. By doing this I will be able to better control the UI (Basically hide it).
Is this thought process correct?