简体   繁体   中英

WiX burn bootstrapping x86 and x64 msi's into single No-UI bootstrapper

I have x64 and x86 versions of my installer .msi, and want to ship a single executable which simply checks the machine architecture and runs the x86/x64 MSI . The MSIs are basically identical, they install the same AnyCPU files, which I bundle in a shared .cab file so as not to double the size of the installer.

So far I've tried WiX Burn, which pops up a GUI which I don't want (I just want to use the MSI GUI), and I tried disabling the burn GUI via /silent flag - this propagates this flag to the MSIs so it disables all GUI for MSIs (not what I want).

I think I am correct when I say there is no default No-GUI version of Burn bootstrapper , and to create one you must edit the source code yourself? This sounds like a massive missing feature?

I've also tried DotNetInstaller which has it's own set of problems with a confusing user interface. I've also tried setupbld which does not support MSIs with an external cab.

For the architecture detection you could use the InstallCondition attribute in the MsiPackage element.

To put it simply try:

<MsiPackage SourceFile="..\Example\bin\Release\x86\example.msi" Compressed="no" InstallCondition="NOT VersionNT64" />
<MsiPackage SourceFile="..\Example\bin\Release\x64\example.msi" Compressed="no" InstallCondition="VersionNT64" />

Sources: http://wix.sourceforge.net/manual-wix3/wix_xsd_msipackage.htm

As the other answers suggest you can use the VERSIONNT64 variable to check the on which platform you are installing.

Wix Burn supports NO-GUI or quiet mode by passing the command line parameter "-q".

Along with that it supports the following other arguments too:

The wixstdba supports only the "standard package switches":

-q, -quiet, -s, -silent = silent install 
-passive = progress bar only install 
-norestart = suppress any restarts 
-forcerestart = restart no matter what (I don't know why this is still around) 
-promptrestart = prompt if a restart is required (default) 
-layout = create a local image of the bootstrapper (i.e. download files so they can be burned to DVD) 
-l, -log = log to a specific file (default is controled by bundle developer) 
-uninstall = uninstall 
-repair = repair (or install if not installed) 
-package,-update = install (default if no -uninstall or -repair) 

Type your wixburnexename /? To get the details on your machine.

You could use custom actions and Burn Built-in Variables to check whether you are running on X86 or x64. Based on this you could execute/arrange the list of actions.

<InstallExecuteSequence>
   <Custom Action="Windows32bitInstall" After="InstallFiles">NOT VersionNT64</Custom>
   <Custom Action ="Windows64bitInstall" After="InstallFiles" >VersionNT64</Custom>
   <Custom Action="InstallHelp" After="Windows64bitInstall">NOT Installed</Custom>
</InstallExecuteSequence>

This would execute with the same elevation.

<CustomAction Id="InstallHelp" Directory="ProgramFilesFolder"
          Execute="deferred" Impersonate="no" Return="ignore"
          ExeCommand="[HELPDIR]\help.exe /log" />

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM