2012-07-17 91 views

回答

6

<Custom>元素的OnExit屬性是您正在查找的元素。它與BeforeAfterSequence屬性互斥,並且可以具有以下值:successcancel,errorsuspend

UPDATE:基本上,這就是我的意思是:

1)定義自定義操作,將你想要它做的工作(收集一些故障數據)。請注意,您必須定義指向同一物N的自定義操作,因爲CustomAction MSI table預計Id作爲主鍵(我們假設它的DLL CA):

<CustomAction Id="LogFailureOnCancel" BinaryKey="CustomActions" DllEntry="LogFailure" ... /> 
<CustomAction Id="LogFailureOnError" BinaryKey="CustomActions" DllEntry="LogFailure" ... /> 

注:兩個定義指向同一操作(DllEntry屬性)。

2)適當地安排這些自定義操作:

<Custom Action="LogFailureOnCancel" OnExit="cancel" /> 
<Custom Action="LogFailureOnError" OnExit="error" /> 
+0

謝謝Yan提供的解決方案。但我不想要任何特定自定義操作的返回代碼。更具體地說,如果無論哪個操作(或自定義操作)引發錯誤,安裝都會失敗,我想執行一個自定義操作,收集系統中的某些故障數據並通過將其發送到服務器來處理它。 – 2012-07-17 10:49:03

+0

嗯,我仍然認爲這可以通過建議的解決方案來實現......我會更新我的答案以獲得更具體的結果,並且您會看到這是否是您要查找的內容。 – 2012-07-17 13:11:53

+0

還有一個問題是否有成功安裝MSI後發生任何Windows安裝程序屬性或發生任何錯誤或用戶取消安裝,然後包含錯誤代碼。 – 2012-07-18 05:32:36

0

爲Windows安裝程序允許的程度了,在調度用於回滾自定義操作,這是唯一可能的。不過,回滾僅適用於延遲腳本,因此它僅適用於在InstallInitialize和InstallFinalize之間調度的操作。如果此調度窗口外的即時模式操作導致安裝中止,則回滾不適用。

假設你正在使用C++或InstallScript中的動作,你可以找到如果啓用回滾,如果你是在回滾,通過調用MsiGetMode - 分別使用MSIRUNMODE_ROLLBACKENABLEDMSIRUNMODE_ROLLBACK