4

I have an setup for my C# application. At the end of setup I added a checkbox proposing to launch application. It works good. But i'm unable to add a second checkbox proposing to launch an optional installer.

There is my code:

<?xml version="1.0" encoding="UTF-8"?>
<?define compagny = "myCompagny"?>
<?define product = "myProduct"?>
<?define version = "!(bind.FileVersion.MyProject.exe)"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Product Id="*"
           Name="$(var.product)"
           Language="1033"
           Version="$(var.version)"
           Manufacturer="$(var.compagny)"
           UpgradeCode="PUT-GUID-HERE">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine"/>
    <Icon Id="icone.ico" SourceFile="$(var.MyProject.ProjectDir)\Images\icone-VR.ico"/>
    <Property Id="ARPPRODUCTICON" Value="icon.ico"/>
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed."/>
    <Media Id="1" Cabinet="MyProject.cab" EmbedCab="yes"/>

    <Feature Id="ProductFeature" Title="$(var.product)" Level="1">
      <ComponentGroupRef Id="ProductComponents"/>
      <ComponentRef Id ="ApplicationShortcut"/>
      <ComponentRef Id ="ApplicationShortcutDesk"/>
    </Feature>

    <WixVariable Id="WixUILicenseRtf"
                 Value="..\license.rtf"/>
    <WixVariable Id="WixUIBannerBmp"
                 Value=".\Resources\WixUIBannerBmp.bmp"/>
    <WixVariable Id="WixUIDialogBmp"
                 Value=".\Resources\WixUIDialogBmp.bmp"/>

    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch $(var.product)" />
    <Property Id="WIXUI_EXITDIALOGOPTIONALTEXT" Value="Warning. If you don't have optionnal package, consider to install it."/>

    <Property Id="WixShellExecTarget" Value="[#MyProject.exe]" />
    <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

    <UI>
      <UIRef Id="WixUI_Minimal"/>
      <Publish Dialog="ExitDialog"
               Control="Finish" 
               Event="DoAction" 
               Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
    </UI>
  </Product>

  [...]
 </Wix>

How can I add another CheckBox to launch ./Resources.myOptionalPackage.exe ?

If I can't add another checkbox, can I add a new dialog page used to install the feature ?

A.Pissicat
  • 3,023
  • 4
  • 38
  • 93

1 Answers1

5

You must create own edited UI with custom dialog.

1.First go to official GIT repository and copy files WixUI_Minimal.wxs and ExitDialog.wxs , or copy whole repository and find files locally. Create own copies of this files to you project/Solution and rename them for example to WixUI_Custom.wxs and MyExitDialog.wxs .

Replace content of new files too, for WixUI_Minimal.wxs replace

<UI Id="WixUI_Minimal"> to <UI Id="WixUI_Custom">,

for ExitDialog.wxs replace

<Dialog Id="ExitDialog" Width="370" Height="270" Title="!(loc.ExitDialog_Title)"> to <Dialog Id="MyExitDialog" Width="370" Height="270" Title="!(loc.ExitDialog_Title)">

and both

<Show Dialog="ExitDialog" OnExit="success" Overridable="yes" /> to <Show Dialog="MyExitDialog" OnExit="success" Overridable="yes" />

2.Change <UIRef Id="WixUI_Minimal"/> in your Product to <UIRef Id="WixUI_Custom"/>

3.Now you installer should open with exact UI as before, but from your classes

4.Open WixUI_Custom and change

<Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999"> to <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">

so UI will open our new Dialog.

5.Open MyExitDialog.wxs and add new Control block, as it is already present

<Control Id="OptionalCheckBox" Type="CheckBox" X="135" Y="190" Width="220" Height="40" Hidden="yes" Property="WIXUI_EXITDIALOGOPTIONALCHECKBOX" CheckBoxValue="1" Text="[WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT]">
  <Condition Action="show">
    WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT AND NOT Installed
  </Condition>
</Control>

Change identificator Id to anything, X,Y for new position in dialog, Property for new property, in which will be checkbox value stored and Text for new property, in which will be displayed text stored. Place Text property to Condition too, so display will depend on text property set, as in existing checkbox.

<Control Id="SecondCheckBox" Type="CheckBox" X="135" Y="220" Width="220" Height="40" Hidden="yes" Property="WIXUI_SECONDCHECKBOXVALUE" CheckBoxValue="1" Text="[WIXUI_EXITDIALOGSECONDCHECKBOXTEXT]">
  <Condition Action="show">
    WIXUI_EXITDIALOGSECONDCHECKBOXTEXT AND NOT Installed
  </Condition>
</Control>

6.Now you can do the same things with new Checkbox as with existing using new properties defined in new Control.

Mischo5500
  • 796
  • 6
  • 14
  • Thank you ! I have to solve step 6 (my second check box calls the first one, probably because second `CustomAction` point on `WixShellExecTarget`) but it's another problem. – A.Pissicat Sep 13 '16 at 08:17
  • Maybe if you know the answer I asked the question http://stackoverflow.com/questions/39465862/unable-to-launch-exe-in-wix-setup, I can't call the .exe that I want – A.Pissicat Sep 13 '16 at 09:36