2012-09-22 120 views
3

我有一個自定義操作WiX。回滾自定義操作時被取消安裝

<CustomAction Id="myActionId" BinaryKey="myAction" DllEntry="MySimpleAction" Execute="immediate" Return="check" /> 

<InstallExecuteSequence> 
     <Custom Action="myActionId" After="InstallInitialize">CHECKBOXCOPYPROP=1</Custom> 
</InstallExecuteSequence> 

我的自定義操作做備份和解決數據庫。我需要在取消安裝時執行回滾(drop database)。 我做了:

<CustomAction Id="myActionId" BinaryKey="myAction" DllEntry="MySimpleAction" Execute="immediate" Return="check" /> 
<CustomAction Id="myActionRollbackId" BinaryKey="myActionRollback" DllEntry="MySimpleAction" Execute="rollback" Return="check" /> 

<InstallExecuteSequence> 
     <Custom Action="myActionId" After="InstallInitialize">CHECKBOXCOPYPROP=1</Custom> 
     <Custom Action="myActionRollbackId" Before="myActionId">CHECKBOXCOPYPROP=1</Custom> 
</InstallExecuteSequence> 

但是我有一個錯誤。

如果我這樣做:

<CustomAction Id="myActionId" BinaryKey="myAction" DllEntry="MySimpleAction" Execute="immediate" Return="check" /> 
<CustomAction Id="myActionRollbackId" BinaryKey="myActionRollback" DllEntry="MySimpleAction" Execute="immediate" Return="check" /> 

<InstallExecuteSequence> 
     <Custom Action="myActionId" After="InstallInitialize">CHECKBOXCOPYPROP=1</Custom> 
     <Custom Action="myActionRollbackId" After="myActionId">CHECKBOXCOPYPROP=1</Custom> 
</InstallExecuteSequence> 

我的自定義操作myActionRollbackId作品。

如何在取消安裝時運行回滾? 有人可以幫助我嗎?

回答

1

在安裝時運行並對數據庫執行某些操作的自定義操作應推遲(Execute='deferred')。其相應的回滾操作應爲Execute='rollback'。當您計劃這些自定義操作時,應該先執行回滾操作。

此外,請確保條件設置正確。

+0

如果對CustomAction Id =「myActionId」的Execute ='deferred'我對此自定義操作有錯誤。 – kenai

+0

什麼樣的錯誤?你能發佈一個摘錄從詳細的日誌文件嗎? –

0

安裝總是在交易中完成。當你啓動一個安裝程序時,它首先會創建一個名爲安裝腳本的東西,就像安裝時要做的事情一樣。 當我們將一些自定義動作設置爲Execute =「立即」時,它會立即執行,但當我們將動作設置爲Execute =「延遲」時,它會被添加到安裝腳本中,因此回滾變得容易。 現在需要注意的一點是我們可以訪問會話Execute =「立即」模式,但我們無法訪問會話Execute =「延遲」模式。 如果我們嘗試訪問會話,它會給出錯誤,在這種情況下可能是您的錯誤的原因...

相關問題