Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WiX: How do I get the MSI's dialogs to show, when wrapped in Burn/EXE?

I have an MSI with its dialogs, prompting the user to [1] browse to installation directory, [2] accept EULA, [3] Launch app when the installation is finished.

I wrapped the MSI in a Burn Bundle to make an EXE. Now all I see is the EXE's prompt for the EULA, but no prompt to choose the installation directory, or launch the app.

I want to use the EXE format because customers understand it, I can associate my icon and embed my version number in the EXE, and it prompts for Admin password. Customers download my software as a single executable file.

This is the code:

<WixVariable Id="WixStdbaLogo" Value="MyIcon.ico" />
<Variable Name="InstallFolder" Type="string" Value="[ProgramFilesFolder]MyCompany\MyProduct"/>
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<WixVariable Id="WixStdbaLicenseRtf" Value="MyLicense.rtf" />

<Chain>
    <MsiPackage
      Id="Setup"
      Compressed="yes"
      SourceFile="MyProduct.msi"
      Vital="yes"
      DisplayInternalUI="yes"
      EnableFeatureSelection="yes"
      >
        <MsiProperty Name="INSTALLLOCATION" Value="[InstallFolder]" />
    </MsiPackage>
</Chain>

The "DisplayInternalUI="yes" option doesn't seem to do what I want. "EnableFeatureSelection" makes no difference whether it's yes or no.

How do I get the MSI dialogs to display? Alternatively, how do I get the Burn-produced EXE to prompt for installation directory, and app launch?

I am using WiX 3.7.1224, VS 2010.

I have looked at the following sources:

  • WiX.chm
  • WiX Tutorial (http://wix.tramontana.co.hu/tutorial)
  • SourceForge (http://wix.sourceforge.net/index.html)
  • Joy of Setup (http://www.joyofsetup.com/)
  • WiX Toolset, OuterCurve (http://wixtoolset.org/)
  • WiX Users Forum (http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/)
  • Dizzy Monkey (http://www.dizzymonkeydesign.com/blog/misc/adding-and-customizing-dlgs-in-wix-3/)

Here is the MSI (added 30 Jun 13:07 AST):

<Product Id="*" Name="My Product" Language="1033" Version="5.0.0" 
     Manufacturer="My Company" UpgradeCode="0bd6d4cf-d23d-431a-9baf-c72cb0525f0c">
  <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

  <MajorUpgrade DowngradeErrorMessage="A newer version of My Program is already installed." />
  <MediaTemplate EmbedCab="yes" CompressionLevel="high"/>

  <Feature Id="ProductFeature" Title="My Product" Level="1">
    <ComponentGroupRef Id="ProductComponents" />
  </Feature>

  <!-- Set Installer's Icon in Add/Remove Programs -->
  <Icon Id="icon.ico" SourceFile="MyProduct.ico"/>
  <Property Id="ARPPRODUCTICON" Value="icon.ico" />

  <Property Id="ProductSeed"> 3022 </Property> 
  <Binary Id="PlantSeedDLL" SourceFile="..\..\PlantSeed\Release\PlantSeed.DLL" />
  <CustomAction Id="DLLPlantSeed" BinaryKey="PlantSeedDLL" DllEntry="PlantSeedFunc"
    Execute="immediate" Return="check" HideTarget="no" Impersonate="yes"/>

  <!-- Step 1: Define the directory structure -->
  <Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder">
      <Directory Id="INSTALLFOLDER" Name="My Product"/>
    </Directory>
    <!-- Shortcut on Start Menu -->
    <Directory Id="ProgramMenuFolder">
      <Directory Id="ApplicationProgramsFolder" Name="My Product"/>
    </Directory>
    <!-- Desktop shortcut -->
    <Directory Id="DesktopFolder" Name="Desktop">
    </Directory>
  </Directory>

  <CustomAction Id="Install_PDF_printer" FileKey="Install.exe"
    ExeCommand='Install.exe -s "My PDF Printer" -n "My Company Inc." -c "****************"'
    Execute="deferred" Return="check" HideTarget="no" Impersonate="no" />

  <!-- Banner images -->
  <!-- <WixVariable Id="MainLogoBmp" Value="Resources/Images/weblabel.jpg" /> -->
  <WixVariable Id="WixUIBannerBmp" Value="MyProduct iconWiXbanner.jpg" /> <!-- 493 × 58 -->
  <WixVariable Id="WixUIDialogBmp" Value="MyProduct 616x390.jpg" /> <!-- 616 × 390 -->

  <!-- License (not necessary to have it as a component) -->
  <WixVariable Id="WixUILicenseRtf" Value="MyProduct License.rtf" />

  <!-- Prompt for install directory -->
  <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
  <UIRef Id="WixUI_InstallDir" />

  <!-- Display checkbox Prompt to run EXE at end -->
  <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1"/> <!-- Default to checked -->
  <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch My Product" />
  <Property Id="WixShellExecTarget" Value="[#MyProduct.exe]" />
  <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

  <!-- Prompt to run EXE at end -->
  <UI>
    <UIRef Id="WixUI_FeatureTree"/> <!-- causes compilation errors -->
    <Publish Dialog="ExitDialog"
      Control="Finish"
      Event="DoAction"
      Value="LaunchApplication">
      WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed
    </Publish>
  </UI>

  <UI> <!-- For the dialogs -->
    <TextStyle Id="Font10" FaceName="Tahoma" Size="10" Red="0" Green="0" Blue="0"  />
    <TextStyle Id="Font12" FaceName="Tahoma" Size="12" Red="0" Green="0" Blue="0"  />
  </UI>

  <!-- Include dialogs -->
  <Property Id="ApplicationFolderName" Value="MyProduct Folder" /> <!-- WixUI_Advanced -->
  <Property Id="WixAppFolder" Value="WixPerMachineFolder" /> <!-- WixUI_Advanced -->
  <!-- Install for all users -->
  <WixVariable Id="WixUISupportPerUser" Value="0" /> <!-- WixUI_Advanced -->

  <!-- Write product key in Registry -->
  <DirectoryRef Id="TARGETDIR">
    <Component Id="RegistryEntries" Guid="*">
    <!-- HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\My Company Inc.\My Product -->
    <RegistryKey Root="HKLM"  
           Key="Software\My Company Inc.\My Product" >
      <RegistryValue Type="string" Name="TARGET" Value="[INSTALLFOLDER]"/>
    </RegistryKey>
    </Component>
  </DirectoryRef>

    <!-- Shortcut on Start Menu -->
  <DirectoryRef Id="ApplicationProgramsFolder">
    <Component Id="ApplicationShortcut" Guid="*">
      <Shortcut Id="ApplicationStartMenuShortcut"
        Name="My Product"
        Description="My Product"
        Target="[INSTALLFOLDER]MyProduct.exe"
        WorkingDirectory="INSTALLFOLDER"
      />
      <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
      <RegistryValue Root="HKCU" Key="Software\Microsoft\My Product" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
    </Component>
  </DirectoryRef>

  <!-- Step 2: Add files to your installer package -->
  <DirectoryRef Id="INSTALLFOLDER">

    <Component Id="MyProduct.exe" Guid="*">
      <File Id="MyProduct.exe" Name="MyProduct.exe"
        Source="..\\..\\Release\\MyProduct.exe"
        KeyPath="yes" Checksum="yes">

        <!-- Desktop shortcut -->
        <Shortcut Advertise="yes"
          Id="MyProductDesktopShortcut"
          Directory="DesktopFolder"
          Name="My Product"
          WorkingDirectory="INSTALLFOLDER"
          Description="My Product"
          Icon="MyProduct.ico">
          <Icon Id="MyProduct.ico" SourceFile="MyProduct.ico" />
        </Shortcut>
      </File>
    </Component>

    <Component Id="MyProduct.chm" Guid="*">
      <File Id="MyProduct.chm" Source="MyProduct.chm" KeyPath="yes" Checksum="yes"/>
    </Component>
    <Component Id="MyProduct.bmp" Guid="*">
      <File Id="MyProduct.bmp" Source="MyProduct.bmp" KeyPath="yes" Checksum="yes"/>
    </Component>
    <Component Id="MyProduct.ico" Guid="*">
      <File Id="MyProduct.ico" Source="MyProduct.ico" KeyPath="yes" Checksum="yes"/>
    </Component>

    <!-- Many, many more components... -->
  </DirectoryRef>

  <!-- Step 3: Tell WiX to install the files -->
  <Feature Id="MainApplication" Title="Main Application" Level="1">
    <ComponentRef Id="MyProduct.exe" />
    <ComponentRef Id="MyProduct.bmp" />
    <ComponentRef Id="MyProduct.ico" />
    <ComponentRef Id="MyProduct.chm" />

    <ComponentRef Id="ApplicationShortcut" />

    <ComponentRef Id="RegistryEntries" /> <!-- Registry entry -->
  </Feature>

  <InstallExecuteSequence>
    <!-- Before="InstallFinalize" -->
    <Custom Action="Install_PDF_printer" After="InstallFiles" />
  </InstallExecuteSequence>

  <!-- Calculate Trial Expiry date, write to Registry -->
  <InstallExecuteSequence>
    <Custom Action="DLLPlantSeed" After="InstallFiles" />
  </InstallExecuteSequence>  
</Product>

<Fragment>
  <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
    <!-- TODO: Remove the comments around this Component element 
      and the ComponentRef below in order to add resources to this installer. -->
    <!-- <Component Id="ProductComponent"> -->
      <!-- TODO: Insert files, registry keys, and other resources here. -->
    <!-- </Component> -->
  </ComponentGroup>
</Fragment>
like image 283
Pierre Avatar asked Jun 28 '13 21:06

Pierre


People also ask

How WiX installer works?

The installer allows users to select a project from a pre-populated list, or they can create a new project from scratch. Once the project is selected, the installer will walk the user through the installation process. PRO TIP: The WiX Installer is a tool that allows you to create Windows Installer (MSI) packages.

What is WiX burn?

WiX Burn is a toolset that allows developers to create installer applications for Windows Installer, the Microsoft installation engine. WiX Burn is based on the WiX (Windows Installer XML) toolset.


2 Answers

Vice versa: try supress WIX ExitDlg in the MSI and leave your BA dialog.

like image 102
Dimiano Avatar answered Nov 15 '22 09:11

Dimiano


Just add the DisplayInternalUI tag.

<MsiPackage SourceFile = 'xxx' Id='xxx' Vital='yes'  DisplayInternalUI='yes'></MsiPackage>
like image 21
RESPECT4ALL Avatar answered Nov 15 '22 09:11

RESPECT4ALL