Wix Burn automatically cancelling - wix

I have a very simple Burn bootstrapper that installs the Visual Studio 2015 Redistributable and then runs our application installer (created with Wix). During installation, after installing the redistributable, a dialog pops up automatically that asks if I would like to cancel (i.e., the same thing that would happen if I clicked the Cancel button).
I've created several other installers that use this same pattern and never have seen this problem. Below is the simplified installer with some identifying information removed:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
<?define ProductVersion = "1.0"?>
<?define Manufacturer = "XXXX, Inc."?>
<?if $(var.Platform) = x64 ?>
<?define VCRedistExe = "vc_redist.x64.exe"?>
<?else?>
<?define VCRedistExe = "vc_redist.x86.exe"?>
<?endif?>
<Bundle Name="$(var.ProductName)" Version="$(var.ProductVersion)" Manufacturer="$(var.Manufacturer)" UpgradeCode="$(var.UpgradeCode)" Condition="VersionNT >= v6.0">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" >
<bal:WixStandardBootstrapperApplication LicenseFile="$(var.AssetsPath)\License.rtf" SuppressOptionsUI="yes"/>
</BootstrapperApplicationRef>
<Chain>
<PackageGroupRef Id="redist"/>
<MsiPackage SourceFile="$(var.MsiPath)" DisplayInternalUI="no"/>
</Chain>
</Bundle>
<Fragment>
<PackageGroup Id="redist_vc140">
<ExePackage Id="vc140" DisplayName="Visual C++ 2015 Redistributable" Cache="no" PerMachine="yes" Permanent="yes" Vital="yes" Compressed="yes" SourceFile="resources/$(var.VCRedistExe)" InstallCommand="/install /quiet /norestart" Protocol="burn">
<ExitCode Value="3010" Behavior="forceReboot"/>
<!-- Ignore "Newer version installed" error -->
<ExitCode Value="1638" Behavior="success"/>
</ExePackage>
</PackageGroup>
</Fragment>
<Fragment>
<PackageGroup Id="redist">
<PackageGroupRef Id="redist_vc140"/>
</PackageGroup>
</Fragment>
</Wix>

I believe you should remove the following exit code, as it is not necessary for installing your packages. Possibly conflicting with your bootstrapper installation.
<ExitCode Value="3010" Behavior="forceReboot"/>
Hope this helps you!

Related

WIX Uninstall an EXE Package

I am working on a wix installer that Installs WebView2. I have this working. However, when I uninstall WebView2 is left on my system. How do I remove the WebView2 when the uninstaller is ran?
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" >
<Bundle Name="Build.Bootstrap.Installer" Version="1.0.0.0" Manufacturer="Company Name" UpgradeCode="GUID">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"/>
<Chain>
<ExePackage Id="InvokeBootstrapper" Name="Install WebView2 Runtime" Cache="no" Compressed="no"
PerMachine="yes" Vital="yes" SourceFile="MicrosoftEdgeWebview2Setup.exe"
InstallCommand=" /silent /install" InstallCondition="NOT (REMOVE OR WVRTInstalled)" />
<!-- TODO: Define the list of chained packages. -->
<!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
</Chain>
</Bundle>
</Wix>

how to check condtiotion for version check in bootstraper (wix)?

I am using bootstraper to install VC++ and .net framework,
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Bundle Name="Engage" Version="1.0.0.0" Manufacturer="my Corporation" UpgradeCode="d7d559b1-3388-4275-91e2-d8d44d2f02db">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<!-- TODO: Define the list of chained packages. -->
<PackageGroupRef Id="Netfx45FullPackage" />
</Chain>
</Bundle>
<Fragment>
<PackageGroup Id="Netfx45FullPackage">
<ExePackage Id="Netfx45Xxx" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" SourceFile=".\NDP452-x86-x64ENU.exe" />
<ExePackage Id="VC2013" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q" SourceFile=".\vcredist_x862013.exe" />
<MsiPackage Id="MyProg" Cache="no" Compressed="no" DisplayInternalUI="yes" Vital="yes" SourceFile="D:\Projects\Crimson\engage.client\EngageSetupCreator\bin\Debug\EngageSetupCreator.msi" />
</PackageGroup>
</Fragment>
</Wix>
currently iam installing those two without checking any condition, what should I do to check if the same version for vc++ and .netframework exist, and if exist skip the installation ?
no need to install again if already exists.
You need to add detect condition and use registry search to get the installed version.
For example:
<?define NetFx451MinRelease = 378675 ?>
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
<ExePackage Id="NetFx451"
...
DetectCondition="NETFRAMEWORK45 >= $(var.NetFx451MinRelease)"
...
>
</ExePackage>
Same for the vc++.

Wix-downgrade option is not working even when i set "yes" in Major upgrade tag

Please see below bundle file
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Bundle Name="Boot_Demo" Version="2.0.0" Manufacturer="Demo-Product" UpgradeCode="{8B19CAE6-59BD-4001-958B-9D2E9F9A1B4D}">
<Chain>
<!-- TODO: Define the list of chained packages. -->
<!-- <MsiPackage SourceFile="path\to\your.msi" /> -->
<MsiPackage SourceFile="D:\Jayesh\TestProjects\Demo-Product\Demo-Product\bin\Debug\Demo-Product.msi"
DisplayInternalUI="yes"
Visible="yes"
ForcePerMachine="yes"
Permanent="no"
Vital="yes"
EnableFeatureSelection="yes"
>
</MsiPackage>
</Chain>
</Bundle>
</Wix>
am getting same error while downgrading with different versions .
am used first 2.0.0 in bundle file and product.wxs file. Then I have given 1.0.0.

Merging two msi using wix toolset

How to merge two msi using wixedit, presently they are having 4.0 version of wixtoolset. In the documentation they have mentioned that merging two msi in windows is possible using bundles and chain tags. But whenver I try to do it, it always show some error. Please let me know any example of wix tool set to merge two msi using bundle and chain tags.
I am following Bootstrapper method as provided in pdf of wix 3.6. To bundle two msi using chain element.
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<Bundle Name="Prog" Version="0.0.0.1" Manufacturer="my Corporation" UpgradeCode="f380ae43-5df1-4cfe-9297-526e3e333e99">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
<bal:WixStandardBootstrapperApplication LicenseFile="..\license.rtf" />
</BootstrapperApplicationRef>
<Chain>
<!-- TODO: Define the list of chained packages. -->
<PackageGroupRef Id="Netfx45FullPackage" />
</Chain>
</Bundle>
<Fragment>
<PackageGroup Id="Netfx45FullPackage">
<MsiPackage Id="Prog" Cache="no" Compressed="no" DisplayInternalUI="yes" Vital="yes" SourceFile="$(var.installerPath)\Prog.msi" />
<MsiPackage Id="Prog2" Cache="no" Compressed="no" DisplayInternalUI="yes" Vital="yes" SourceFile="$(var.installerPath)\Prog2.msi" />
</PackageGroup>
</Fragment>
</Wix>
you can add the variable installerPath

Prevent Burn from uninstalling .NET package

I'm using a WiX bootstrapper to install .NET and my application. The .NET installation is specified in a chain using the statement
<PackageGroupRef Id="NetFx40Redist">
When I uninstall using the bootstrapper, the .NET package is also uninstalled. How can I modify the above statement to tell the bootstrapper not to remove the .NET package?
EDIT: Following is the code I ended up writing to do this. Comments are welcome if there is anything I should do differently.
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
<Bundle Name="appName" Version="$(var.Version)" Manufacturer="mfr" UpgradeCode="your-GUID"
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Variable Name="InstallFolder" Type="string" Value="[ProgramFilesFolder]mfrName\appName" />
<Chain>
<PackageGroupRef Id="Net4Redist"/>
<MsiPackage
Id="MsiInstaller"
Compressed="yes"
SourceFile="$(var.SolutionDir)\appName_Installer\bin\$(var.Configuration)\appName_Installer.msi"
Permanent="no"
Vital="yes">
<MsiProperty Name="INSTALLLOCATION" Value="[InstallFolder]" />
</MsiPackage>
</Chain>
</Bundle>
<Fragment>
<PackageGroup Id="Net4Redist">
<ExePackage Id="Netfx40Xxx" Cache="no" Compressed="yes" PerMachine="yes"
Permanent="yes" Vital="yes" InstallCommand="/q"
SourceFile="$(var.SolutionDir)\Bootstrapper\redist\dotNetFx40_Full_x86_x64.exe"
InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0)"/>
</PackageGroup>
</Fragment>
</Wix>
Did you try using the "Permanent" attribute in the EXEPackage element?
EXEPackage
Glad you solved your issue but, as you mentioned, you do not have any detect condition setup so that is probably why you are seeing .NET processing every time you run your installer. If you add the following registry search and detect condition to your example you should not see that anymore:
<Fragment>
<util:RegistrySearchRef Id="NETFRAMEWORK40"/>
<PackageGroup Id="Net4Redist">
<ExePackage Id="Netfx40Xxx" Cache="no" Compressed="yes" PerMachine="yes"
Permanent="yes" Vital="yes" InstallCommand="/q"
SourceFile="$(var.SolutionDir)\Bootstrapper\redist\dotNetFx40_Full_x86_x64.exe"
DetectCondition="NETFRAMEWORK40"
InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0)"/>
</PackageGroup>
</Fragment>