簡體   English   中英

Wix工具集:如何在自定義操作中確定安裝模式

[英]Wix Toolset: How to determine installation mode in a Custom Action

是否有機會在“自定義操作”中檢查安裝模式的類型。 我想為安裝和卸載模式創建一個自定義操作,但是根據該模式執行不同的邏輯。

就像是:

public static ActionResult CreateBackUpAction(Session session)
{
    //if (InstallType == "Install")
    //{
    //  BackUpFiles();
    //}
    //else if (InstallType == "Remove")
    //{
    //    DeleteBackUpFiles();
    //}

    return ActionResult.Success;
}

我知道理想情況下,兩種情況下我應該有兩種不同的操作,但是我想減少安裝程序源中的行數。

您應該能夠使用會話對象的Item獲取當前安裝的屬性值。 session [“ REMOVE”](應該為“ ALL”)的值將告訴您這是卸載,而session [“ Installed”]的值則是全新安裝。

但是,是的,出於以下幾個原因,您應該使用以下類型的條件來調用單獨的自定義操作:

  1. 這意味着您不必擔心延遲的自定義操作和屬性,並且不需要將延遲的自定義操作模型與CustomActionData一起使用,因為Windows會處理它。 例如,如果推遲了自定義操作,則可能無法使用會話[“ REMOVE”]。 該文檔沒有說明在延遲的自定義操作中可以使用Installed或REMOVE屬性,因此您將使用session.CustomActionData和另一個自定義操作來對其進行設置。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370543(v=vs.85).aspx

  1. 對進程外方法的托管代碼自定義操作調用並不便宜。 當您可以使用“未安裝”作為條件時,您將調用所有該機制並返回。 如果您具有可以更改的功能或維修,那么如果您在通話中沒有任何條件,則將再次呼叫並再次返回(什么也沒做)。

  2. 您沒有應對回滾的好方法,因為(例如)如果卸載失敗並回滾,我認為您實際上更希望保留要用代碼刪除的那些備份文件。 換句話說,在安裝失敗,卸載失敗,回滾以及升級現有已安裝產品的情況下,不清楚要如何處理這些備份文件。

我也認為,比起一大堆有條件的大型代碼,執行某件事的幾個較小的,集中的自定義操作更易於處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM