2011-02-11 55 views
3

錯誤我有以下CustomAction:如何強制維克斯卸載如果在CustomAction

<CustomAction Id="ActionName" 
       After="InstallFinalize"> 
    <![CDATA[NOT Installed AND (VSTORUNTIME4="#1")]]> 
</CustomAction> 

的問題是,有在CustomAction的情況下,當我回到ActionResult.Failure。在這種情況下,安裝程序將顯示錯誤消息並說安裝失敗,但應用程序仍部分安裝(文件已存在於Program Files中,應用程序顯示在Uninstall程序中)。

我想,如果我回到ActionResult.Failure然後安裝將被中止和卸載。如果自定義操作在默認的Visual Studio安裝程序中失敗,那麼會發生這種情況,我認爲它更有意義。

有誰知道如何卸載觸發,如果自定義操作失敗?我是否需要爲WiX XML添加額外的內容?

回答

2

Windows安裝程序默認支持與回滾所有更改系統的能力事務故事。問題是,你在做什麼自定義操作以及他們在哪裏/如何安排?

如果您CustomActions正在改變,他們需要在一個事務的方式這樣做,否則安裝程序無法回滾出來工序的設備狀態的變化你的代碼引起的。

這裏有一對夫婦良好的閱讀文章:

Installation Phases and In-Script Execution Options for Custom Actions in Windows Installer

Zataoca: Classes of Custom Actions

Zataoca: Custom actions should be data driven.

Zataoca: Custom actions are (generally) an admission of failure.

7

目前安裝事務完成後您的自定義操作計劃(後= 「InstallFinalize」)。唯一可以回滾的自定義操作是「InstallInitialize」和「InstallFinalize」之間的「延遲」自定義操作。對於您的延遲自定義操作,您還應該在其之前安排回滾自定義操作。

+1

嗯。這似乎很奇怪。 – victor 2011-02-15 00:55:35

0

我認爲你需要做的是增加「返回」項目在customaction,然後如果自定義操作返回值未歸零的東西,你的安裝會失敗並回滾。

你需要做的是什麼時失敗,以確保您customaction不返回零值。

ExeCommand = 「[INSTALLLOCATION] BeforeUnstall.bat」 ,可執行= 「延期」 回報= 「檢查」 HideTarget = 「否」 冒充= 「否」/>