2011-07-22 59 views
4

執行多個發射條件我已經成功地得到維克斯啓動退出我的應用程序,但不知道如何使用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. 

回答

7

相當簡單,你需要兩個單獨的行動,以「套」 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設置爲比上一個事件大1。

此外,所有這些操作都只能在安裝過​​程中執行,因爲在移除和修復過程中會顯示相同的對話框。

如果執行是可選的,您可能還需要基於複選框的狀態對這些條件進行調整。

<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> 
+0

謝謝,對不起,它需要很長時間已經離開,所以沒有機會測試這一點。 – Jamie

+3

非常酷的解決方案,因爲WixShellExecTarget的其他重複屬性,可以在一個MSI中使用兩個WixShellExec自定義操作。謝謝! –

+1

我試圖使用這個,但它似乎從來沒有在任何版本的工作。我收到以下錯誤: 錯誤找到重複的符號'ControlEvent:ExitDialog/Finish/DoAction/DoExec/NOT Installed'。這通常意味着Id是重複的。檢查以確保給定類型(文件,組件,功能)的所有標識符都是唯一的。 –