Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to execute multiple launch conditions on installer exit

I've managed to get WIX to launch my application on exit, but not sure how to schedule two custom actions using the WixShellExecTarget property.

One CA is to launch an app and the other is a web page based on a url from another CA. These are both launched if the appropriate checkboxes are checked.

<!-- Custom action for executing app -->
    <Property Id="WixShellExecTarget" Value="[#Application.exe]" />
    <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

    <!-- Custom action for executing Webbrowser -->

    <Property Id="???" Value="[CONFIGWIZARDURL]" />
    <CustomAction Id="LaunchConfigWizard" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />

Any help you could give me to get this working would be greatly appreciated.

Cheers, Jamie

[Edit] I've tried the suggestion below and I don't get it setting the appropriate value for the second action. It doesn't go to www.google.com as I suggest:

<Publish Dialog="MyExitDialog" Control="Finish" Event="DoAction" Value="SetExec1"><![CDATA[NOT Installed]]></Publish>
        <Publish Dialog="MyExitDialog" Control="Finish" Event="DoAction" Value="DoExec"><![CDATA[LAUNCHCAPTURE = "1" AND NOT Installed]]></Publish>

        <Publish Dialog="MyExitDialog" Control="Finish" Event="DoAction" Value="SetExec2"><![CDATA[NOT Installed]]></Publish>
        <Publish Dialog="MyExitDialog" Control="Finish" Event="DoAction" Value="DoExec"><![CDATA[LAUNCHCONFIGWIZARD = "1" AND NOT Installed]]></Publish>



Property(S): LAUNCHCONFIGWIZARD = 1
MSI (s) (5C:DC) [14:41:02:119]: PROPERTY CHANGE: Adding CONFIGWIZARDURL property. Its value is 'http://www.google.com'.

MSI (c) (DC:60) [14:41:16:166]: PROPERTY CHANGE: Adding WixShellExecTarget property. Its value is 'C:\...Application\MyApplication.exe'.
Action ended 14:41:16: SetExec1. Return value 1.
MSI (c) (DC:60) [14:41:16:181]: Doing action: DoExec
Action 14:41:16: DoExec. 
Action start 14:41:16: DoExec.

MSI (c) (DC:60) [14:41:16:181]: Creating MSIHANDLE (3) of type 790542 for thread 11104
MSI (c) (DC:E0) [14:41:16:181]: Invoking remote custom action. DLL: C:\Temp\MSIA7A.tmp, Entrypoint: WixShellExec
MSI (c) (DC!8C) [14:41:16:244]: Creating MSIHANDLE (4) of type 790541 for thread 10636
MSI (c) (DC!8C) [14:41:16:244]: Creating MSIHANDLE (5) of type 790531 for thread 10636
MSI (c) (DC!8C) [14:41:16:244]: Closing MSIHANDLE (5) of type 790531 for thread 10636
MSI (c) (DC!8C) [14:41:16:447]: Closing MSIHANDLE (4) of type 790541 for thread 10636
MSI (c) (DC:E0) [14:41:16:447]: Closing MSIHANDLE (3) of type 790542 for thread 11104
Action ended 14:41:16: DoExec. Return value 1.
MSI (c) (DC:60) [14:41:16:447]: Doing action: SetExec2
Action 14:41:16: SetExec2. 
Action start 14:41:16: SetExec2.
MSI (c) (DC:60) [14:41:16:447]: PROPERTY CHANGE: Deleting WixShellExecTarget property. Its current value is 'C:\...Application\MyApplication.exe'.
Action ended 14:41:16: SetExec2. Return value 1.
Action ended 14:41:16: MyExitDialog. Return value 1.
like image 893
Jamie Avatar asked Feb 24 '23 12:02

Jamie


1 Answers

Fairly straightforward, you'll need two separate actions to "set" WixShellExecTarget - they'll just run at different times.

First, you'll setup the actions that are going to be run.

<CustomAction Id="SetExec1" Property="WixShellExecTarget" Value="[#Application.exe]" />
<CustomAction Id="SetExec2" Property="WixShellExecTarget" Value="[CONFIGWIZARDURL]" />
<CustomAction Id="DoExec" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" Return="ignore" />

Now you want to schedule those actions to actually run, in this example I'm tying all of the actions to the Finish button on the final installation dialog. As we're publishing to a Control element, WiX will automatically set Publish/@Order to one greater than the previous event.

In addition, all these actions are conditioned to only execute during installation as this same dialog is displayed during removal and repair.

You'll likely also want to condition these based on the status of your checkboxes if execution is optional.

<UI>
    <!-- Publish set/do for first action -->
    <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="SetExec1">
        <![CDATA[NOT Installed]]>
    </Publish>
    <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="DoExec">
        <![CDATA[NOT Installed]]>
    </Publish>

    <!-- Publish set/do for second action -->
    <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="SetExec2">
        <![CDATA[NOT Installed]]>
    </Publish>
    <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="DoExec">
        <![CDATA[NOT Installed]]>
    </Publish>
</UI>
like image 99
saschabeaumont Avatar answered May 06 '23 07:05

saschabeaumont