2009-02-11 84 views
68

我確信這很容易,但我很難過。我有一個自定義操作,在安裝時執行一個不同的(非MSI)安裝程序。不幸的是,我注意到它也在UNinstallation上執行安裝程序!如何僅在安裝時執行自定義操作(而不是卸載)

我已經看過這些選項,但我不能'找出如何阻止這一點。如果有人能幫助我,我會非常感激。

另外,如何設置自定義操作才能在UNinstall期間關閉?任何幫助是非常感謝傢伙!

+4

對於一個參考:[**通用MSI條件小抄**](HTTP://博客。 flexerasoftware.com/installtalk/2013/04/installer-cheat-sheet-series.html)。 – 2015-04-20 20:42:31

回答

154

在操作上添加一個條件,以便它僅在安裝過程中觸發,而不是在卸載過程中觸發。

行動只運行在安裝

NOT Installed AND NOT PATCH 

操作過程中運行安裝和維修上只有初始安裝

NOT REMOVE 

運行:初始

NOT Installed 

運行安裝或修復時是選擇。

NOT Installed OR MaintenanceMode="Modify" 

運行僅在卸載過程中的操作使用下列條件:

REMOVE~="ALL" 

要只升級過程中執行的操作:

Installed AND NOT REMOVE 
+0

和重新安裝模式? – 2012-06-07 07:15:39

+1

@Rasa重裝模式是什麼意思? MSI沒有這樣的說法,你可能正在尋找「修復」(不去除)。如果您記錄MSI輸出,您可以準確查看在上述條件下使用的各種值將被設置爲什麼,並確定哪一個值符合您的情況。 – saschabeaumont 2012-06-08 22:19:42

0

的自定義操作的條件,可能與一個匹配的自定義操作來執行卸載。不知道你正在使用什麼工具,但假設二次安裝與組件綁定,我會使用該組件狀態。狀態= 3意味着已安裝的目標狀態。狀態= 2意味着不存在的目標狀態。請注意,如果沒有變化,狀態將不會被設置。

7

修正的位:

最後,在卸載過程中使用下列條件只運行一個動作: REMOVE="ALL"

這似乎更適合作爲財產REMOVE包含正在卸載的功能。
因此,如果我進行修改以刪除某個功能,則REMOVE爲true,並且僅在卸載時執行的操作在修改時執行。
More details here on MSDN

6

一個例子:

<InstallExecuteSequence> 
.. 
    <Custom Action="QtExecIdOfCA" Before="InstallFinalize">NOT Installed</Custom> 
.. 
</InstallExecuteSequence> 

.. 
.. 
<CustomAction Id="QtExecIdOfCA" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="ignore" Impersonate="no"/> 

通知!條件被添加到<Custom>標籤和<CustomAction>它搞糊塗了,因爲自後跟行動attribue

相關問題