4

我已经设法让 WIX 在退出时启动我的应用程序,但不确定如何使用WixShellExecTarget属性安排两个自定义操作。

一个 CA 是启动应用程序,另一个是基于来自另一个 CA 的 url 的网页。如果选中相应的复选框,它们都会启动。

<!-- 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" />

您可以为我提供的任何帮助以使这项工作正常进行,我们将不胜感激。

干杯,杰米

[编辑] 我已经尝试了下面的建议,但我没有得到它为第二个操作设置适当的值。它不会像我建议的那样访问 www.google.com:

<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.
4

1 回答 1

8

相当简单,你需要两个单独的动作来“设置” WixShellExecTarget——它们只会在不同的时间运行。

首先,您将设置要运行的操作。

<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" />

现在您想要安排这些操作实际运行,在本例中,我将所有操作绑定到最终安装对话框上的“完成”按钮。当我们发布到一个Control元素时,WiX 将自动设置Publish/@Order为比前一个事件大一。

此外,所有这些操作都只能在安装期间执行,因为在删除和修复期间会显示相同的对话框。

如果执行是可选的,您可能还希望根据复选框的状态来调整这些条件。

<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>
于 2011-07-27T01:54:58.230 回答