我確信這很容易,但我很難過。我有一個自定義操作,在安裝時執行一個不同的(非MSI)安裝程序。不幸的是,我注意到它也在UNinstallation上執行安裝程序!如何僅在安裝時執行自定義操作(而不是卸載)
我已經看過這些選項,但我不能'找出如何阻止這一點。如果有人能幫助我,我會非常感激。
另外,如何設置自定義操作才能在UNinstall期間關閉?任何幫助是非常感謝傢伙!
我確信這很容易,但我很難過。我有一個自定義操作,在安裝時執行一個不同的(非MSI)安裝程序。不幸的是,我注意到它也在UNinstallation上執行安裝程序!如何僅在安裝時執行自定義操作(而不是卸載)
我已經看過這些選項,但我不能'找出如何阻止這一點。如果有人能幫助我,我會非常感激。
另外,如何設置自定義操作才能在UNinstall期間關閉?任何幫助是非常感謝傢伙!
在操作上添加一個條件,以便它僅在安裝過程中觸發,而不是在卸載過程中觸發。
行動只運行在安裝
NOT Installed AND NOT PATCH
操作過程中運行安裝和維修上只有初始安裝
NOT REMOVE
運行:初始
NOT Installed
運行安裝或修復時是選擇。
NOT Installed OR MaintenanceMode="Modify"
運行僅在卸載過程中的操作使用下列條件:
REMOVE~="ALL"
要只升級過程中執行的操作:
Installed AND NOT REMOVE
和重新安裝模式? – 2012-06-07 07:15:39
@Rasa重裝模式是什麼意思? MSI沒有這樣的說法,你可能正在尋找「修復」(不去除)。如果您記錄MSI輸出,您可以準確查看在上述條件下使用的各種值將被設置爲什麼,並確定哪一個值符合您的情況。 – saschabeaumont 2012-06-08 22:19:42
的自定義操作的條件,可能與一個匹配的自定義操作來執行卸載。不知道你正在使用什麼工具,但假設二次安裝與組件綁定,我會使用該組件狀態。狀態= 3意味着已安裝的目標狀態。狀態= 2意味着不存在的目標狀態。請注意,如果沒有變化,狀態將不會被設置。
修正的位:
最後,在卸載過程中使用下列條件只運行一個動作: REMOVE="ALL"
這似乎更適合作爲財產REMOVE
包含正在卸載的功能。
因此,如果我進行修改以刪除某個功能,則REMOVE
爲true,並且僅在卸載時執行的操作在修改時執行。
More details here on MSDN
請注意REMOVE=ALL
。它在installvalidate序列之前不可用。
並檢查以下鏈接瞭解詳情:
http://msdn.microsoft.com/en-us/library/aa371194(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/aa368013(v=vs.85).aspx
一個例子:
<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
對於一個參考:[**通用MSI條件小抄**](HTTP://博客。 flexerasoftware.com/installtalk/2013/04/installer-cheat-sheet-series.html)。 – 2015-04-20 20:42:31