2017-07-25 121 views
0

我有一個現有的WIX安裝程序文件,我試圖弄清楚。在這個文件中我看到定義了兩個自定義操作:從遠程位置WIX升級方案

<Custom Action="CreateBackup"  Before="InstallInitialize">    
    <![CDATA[Installed]]> 
</Custom> 

<Custom Action="RestoreBackup" After= "InstallFinalize"> 
    <![CDATA[NOT Installed]]> 
</Custom> 

的CreateBackup功能拷貝一些文件(不直接相關的安裝程序)。恢復將這些文件放回到相同的位置。

現在在升級場景中,我看到以下日誌記錄順序。我已經把的 「安裝」 表面價值括號:

  • CreateBackup被跳過(安裝==假)
  • InstallInit
  • CreateBackup成功(安裝==真)
  • InstallInit
  • InstallFinalize
  • RestoreBackup被跳過(安裝== true)
  • InstallFinalize
  • RestoreBackup成功(安裝==假)

我有一個關於這幾個問題:

  • 據我所知,有一個卸載和安裝在該腳本中去。根據「已安裝」的價值,我得出結論:安裝是先完成的。它是否正確?
  • 我看到InstallInit在第一次InstallFinalize之前調用兩次。這是什麼意思?卸載開始時安裝仍然很忙?
  • Installed的第一個值是false,所以我猜它是相對於新版本的?但是卸載完成後又如何變成虛假?那麼它是否與舊版本相關?

我正在使用一個MajorUpgrade元素。

希望有人能清楚這一點。

回答

1

我假設你使用的是維克斯MajorUpgrade元素做你的升級,所以你需要的條件應該是這樣的:

當你正在做一個升級WIX_UPGRADE_DETECTED屬性設置時升級正在做:當你想創建備份

http://wixtoolset.org/documentation/manual/v3/xsd/wix/majorupgrade.html

所以使用條件,假設你想要做的現有文件的備份(從舊產品)做升級時。

從您的文章中不清楚您想要執行還原的時間,但是如果升級之後使用相同的WIX_UPGRADE_DETECTED屬性。

基於Installed屬性的這些條件似乎沒有什麼意義,因爲如果安裝了當前MSI的ProductCode,則設置該屬性。在該階段的升級中,它將始終未設置。

這篇文章有關於性能的詳細信息和安裝操作:

How to add a WiX custom action that happens only on uninstall (via MSI)?

+0

這的確是一個majorupgrade元素。我不知道這是相關的:)。我實際上並沒有試圖解決某些問題,我想了解當前實現的流程。在升級過程中,「已安裝」屬性如何更改?備份和還原的作用是從磁盤上的遠程位置(不直接與此安裝程序相關)中保存一些文件。恢復將這些文件放回。我已經更新了我的問題,使其更清晰一些。 – Frank