簡體   English   中英

WiX 刻錄包安裝程序 - 升級安裝時未更新 ExePackage

[英]WiX burn bundle installer - ExePackage not being updated on upgrade install

我正在開發一個安裝 MSI 包和一些 .exe 包的 WiX 引導程序/捆綁安裝程序。 安裝新包時,包安裝程序需要能夠升級其組件。 最初我遇到了一個問題,我的 ExePackage 組件在升級時被卸載,然后我了解到您可以通過在 ExePackage 元素中放置一個 dep:Provides 條目來避免這種情況。 這解決了卸載升級問題,但現在我看到一個問題,即 ExePackage 組件沒有使用更新的捆綁安裝程序進行升級。

我已經通過創建 2 個版本的捆綁安裝程序對此進行了測試 - 一個版本帶有 ExePackage 組件之一的較新版本。 如果我安裝較低版本的包,然后安裝較新版本的包,似乎沒有任何升級 - 它應該升級的一個 ExePackage 組件仍然是舊版本。 但是,由 dep:Provides 元素創建的注冊表項會使用新版本進行更新。 然后,當我卸載捆綁包時,除了應該升級的 ExePackage 組件外,所有內容都被刪除。

似乎缺少此場景和其他 WiX 場景的文檔或示例。 有沒有人有這個場景的例子?

我的 ExePackage 元素之一與此類似:

<ExePackage Id="BLAH_INSTALLER"
              SourceFile="$(var.SolutionDir)\InputBin\BlahSetup.exe"
              Compressed="yes"
              InstallCommand="/install /quiet"
              UninstallCommand="/uninstall /quiet"
              DetectCondition="BlahPresent"
              Cache="always" >
    <dep:Provides Key="Blah" Version="5.0.0.0" />
  </ExePackage>

我的 DetectCondition 邏輯是一個 FileSearch,它看起來類似於:

<util:FileSearch
  Id="Blah_Installed"
  Path="[ProgramFiles64Folder]\blah\blah.exe"
  Variable="BlahPresent"
  Result="version" />

當安裝了該軟件包的確切版本時,您的檢測條件需要為真,否則為假。 所以它可能需要類似於BlahPresent = v5.0.0.0而不僅僅是BlahPresent (即使安裝了不同的版本也是如此)。

DetectCondition似乎阻止了.exe包的更新。 但是,我添加DetectCondition的原因是為了解決另一個問題:如果沒有DetectCondition ,捆綁安裝程序將不會卸載.exe包。 所以似乎我必須在一個問題或另一個問題之間做出選擇 - 我不確定如何解決這兩個問題。

我仍在努力支持使用 EXEPackage 升級,因此這是一項正在進行的工作:

我一開始沒有找到 Provides 元素並決定在我的引導程序中管理我自己的注冊表項。 從我讀到的內容來看,我在注冊表中所做的類似於 Burn 處理提供的方式。

BootstrapperApplication 有一個 Guid 作為它的構建 ID。 構建 ID 對於每個構建都是新的。 安裝時,引導程序在注冊表中為每個包創建一個 PackageID-BuildID 對(MSI 包不需要這個,但也有條目也無妨)。

在調用 Engine.Detect() 之前,我的引導程序在注冊表中進行自己的檢測,並將每個 EXE 包的單個真/假字符串變量作為其 DetectCondition 傳遞。 DetectionCondition 僅當注冊表中存在完全相同的構建 ID 時才為真(即現有的過時包不計為現有包)。 如果引導程序有升級,則禁用刪除包,因為引導程序無法區分同一 EXE 包的不同版本 否則,引導程序可以將其刪除,認為它是舊版本。

由於您沒有提到有關自定義引導程序的任何內容,因此我假設您不會編寫一個。 我想您可以在 WXS 文件中類似地操作注冊表並將條目與您的 DetectCondition 相關聯。

我還沒有解決的問題是在升級過程中刪除了一個EXE包。 我們的引導程序有一個包選擇頁面,類似於 MSI 中的功能選擇。 用戶應該能夠通過取消選擇來刪除舊包而無需安裝新版本。 我的引導程序不會卸載該軟件包,因為它認為它不存在。

對不起,答案很長。 如果仍然令人困惑,很高興在評論中聊天。

暫無
暫無

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

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