2014-09-05 109 views
1

我正在使用Wix 3.8。僅在安裝時自定義操作,但不在更新和不在卸載時

起初,我創建在安裝過程中執行自定義動作的安裝程序(.msi)(用於測試目的,只示出了一個消息):

產品元素:

<Product Id="PUT-GUID-HERE" Name="MyProduct" 
     Version="1.0.1.100" Manufacturer="Foobar Company" 
     UpgradeCode="PUT-GUID-HERE"> 

自定義操作

<CustomAction Id="Message1" Script="vbscript"> 
<![CDATA[ 
MsgBox("First Install?") 
]]> 
</CustomAction> 

<InstallExecuteSequence> 
<Custom Action="Message1" 
     Before="InstallInitialize">NOT Installed AND NOT REMOVE</Custom> 

現在,當我執行我的.msi文件,T他的信息將被顯示在我的安裝:

message box

在接下來,我修改我的產品代碼和增加我的版本號,以建立一個更新:

產品元素:

<Product Id="PUT-GUID-HERE" 
     Name="MyProduct" Version="1.0.2.100" 
     Manufacturer="Foobar Company" 
     UpgradeCode="PUT-GUID-HERE"> 

關於條件NOT Installed AND NOT REMOVE我期望,當我拒絕更新時,消息框不會出現。但它確實:

message box

是什麼,只有將上安裝,但不更新執行自定義操作正確的情況?

回答

2

最後,炒菜用以下條件:

NOT (WIX_UPGRADE_DETECTED OR UPGRADINGPRODUCTCODE) AND NOT (REMOVE="ALL") 

利用這個條件,我只行動反應上安裝,而不是在更新,而不是卸載。

重要提示:安裝程序和更新的.msi都必須包含該條件。

+0

該條件可能不正確,因爲它不包括修復,並且請注意,儘管您可能聽說過,但不能保證您永遠不會得到修復。 IMO所需的條件只是一個普通的舊「未安裝」。然後它將永遠不會再運行。 – PhilDW 2014-09-06 18:34:37

+0

@PhilDW:你對「未安​​裝」的建議是錯誤的。當我進行更新時,該動作將被執行→我已經測試過它。 – Simon 2014-09-08 08:35:00

+0

「更新」是什麼意思?在修補程序,主要升級,修復和次要更新期間,始終設置「已安裝」屬性,因爲該ProductCode定義的產品仍然安裝。我以這種方式多次使用它,因此您的更新可能會有所不同。 – PhilDW 2014-09-09 19:45:12

0

要小心自定義操作的條件,它們很難正確對待。這裏有一個MSI Conditions Cheat Sheet來幫助你。我還沒有測試過這些條件 - 測試是唯一的保證。這裏是another sheet with more advanced info(推薦)。

這裏有一個有趣的帖子:How to add a WiX custom action that happens only on uninstall (via MSI)?

你的建議的情況看起來不錯,但有一個看錶。另外 - 一個補丁提供補丁特有的屬性,如PATCH和MSIPATCHREMOVE。在自定義操作上使用這些條件,以使它們在修補程序期間運行或不運行,具體取決於必要的操作。如果您打算使用補丁程序,您應該將您的自定義操作設置爲而不是,在我看來,補丁程序正在運行。

我刪除了硬編碼指導給你。小心張貼指導 - 用簡單的複製和粘貼你獨特的指導不再那麼獨特。真正的問題可能來自所有硬編碼指導。

相關問題