I'm using WiX to make an MSI installer to call another MSI installer.
I can resolve this situation in UILevel=5 (Full UI) mode. My solution is add a CustomAction to the UISequence table that call another MSI. It will not get error code 1500: "Another installation is already in progress..."
But in slient mode, UILevel = 2, I can't do it, because it only runs CustomAction in ExecuteSequence.
How can I run my MSI in silent mode and call another MSI installer?
Install both MSIs with the Burn bootstrapper included with wix 3.6.
Strictly speaking MSI files are transactional installers so they can only occur one at a time.
Microsoft get around this with merge modules which are like MSI but are used for embedding in MSI files.
Any chance the MSI you want to embed could be changed to be an MSM file?
Related
I have an msi bundled with prerequisites using Wix bootstrapper (burn.exe).
We migrated this project from Installshield to WiX.
The installation works fine.
However, during repair or uninstall the bootstrapper runs the msi-file in silent mode.
Since the last dialog (e.g. 'SetupCompleteSuccess') within the msi file contains some controls to trigger some more actions.
Is there a possibility to configure the bootstrapper so that the msi file is executed in 'UI'-mode?
In WiX v3, it is not possible. Burn explicitly shows internal UI only during initial install. WiX v4 changes how that works: https://github.com/wixtoolset/issues/issues/5616
Is there a reason that the bootstrapper is an exe as opposed to an MSI? And, is there a way to instead generate a MSI?
I need to have multiple localizations of the bootstrapper and would like to apply transforms like can be done for a WiX MSI. And, since the bootstrapper uses the same localization files it'd be nice to be able to use the same approach for the bootstrapper as for an installer.
Many of the things being bootstrapped are MSI based, and you can't really run an MSI from within an MSI install. Bootstrappers are typically executables that contain one or more embedded MSI files - the executable checks if the prerequisite is installed or not, and if not launches the appropriate MSI installs, patches, whatever else is in there.
I have created a Wix Burn app that I am installing two MSI's with. Works great.
The MSI files install properly
The Wix Burn app registers with ARP.
The MSI files do not register with ARP
I can do Major Upgrades
I can install and uninstall manually with a local copy of the Wix Burn app
I can programmatically execute the Wix Burn app to uninstall (using /x)
The Problem:
I know two way to uninstall using a Wix Burn app:
Click on the Uninstall button in ARP (requires user involvement)
Launch a copy of the Wix Burn app that installed the product
I see in the Wix Burn log that Windows caches my Wix Burn app install in much the same way that MSIEXEC will cache MSI files. Is there a way to programmatically ask Windows or MSI to use the cached version of the Wix Burn app to do the uninstall?
A Possibility:
Presumably I could use MsiGetProductInfo() to get a path to the cached Wix Burn app. To do that, however, I need my app's Product Code. However, Product Codes are not attributes of elements in Wix so I am not seeing how to get a Product Code for a Burn package.
You might be able to solve this by iterating through the Uninstall registry entries. The process is:
Open HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall.
Iterate through the sub-keys searching for an entry where the Publisher and DisplayName matches your product.
If you find an entry, read the value of QuietUninstallString and run that as a command. For a WIX burn installer this is typically in the form C:\ProgramData\Package Cache\{GUID}\SetupProgram.exe /uninstall /quiet.
If you are using a 64 bit operating system you will also need to search HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall.
I have a wix installer. It creates a setup msi and exe. The exe will install the prerequisites required before installing the application.
The msi of course just installs the application.
I have users that keep clicking the msi and when they run the app for the first time is will crash because some things were not installed.
How can I combine the msi with the exe in the wix script so my users will only see the setup.exe and not have the chance to click on the msi?
I have a working wix bootstrapper, chaining two wix msi installers, and it works fine.
The output file of the bootstrapper is an exe file, I am interested in changing the output file to be an MSI file, is it possible with bootstrapper?
If so, how do i achieve this?
Thanks.
No, it's not possible. Bootstrappers have to be executables, not MSI packages. If you want to write your own bootstrapper from scratch, you could use EmbeddedChainer to create an .msi with a chainer inside it, on Windows Installer 4.5 and later.