Ошибка загрузки загрузчика WiX при сбое MSI - PullRequest
0 голосов
/ 14 января 2020

Я использую Wix Toolset v3.11 и создал Bootstrapper с помощью приложения WixStandardBootstrapperApplication. Это очень просто и объединяет мои MSI и MSI зависимого продукта.

<Chain>
<MsiPackage SourceFile="$(var.MySetupProject.TargetPath)" Id="MyId" Vital="yes">
    <MsiProperty Name="INSTALLFOLDER" Value="[InstallFolder]" />
</MsiPackage>

<MsiPackage Visible="yes" DisplayName="Dependency (64-bit)"
              DownloadUrl="https://myDownloadUrl/Dependency-64.msi"
              SourceFile="..\Dependency-64.msi"
              Compressed="no"
              InstallCondition="VersionNT64"/>
<MsiPackage Visible="yes" DisplayName="Dependency (32-bit)"
              DownloadUrl="https://myDownloadUrl/Dependency-32.msi"
              SourceFile="..\Dependency-32.msi"
              Compressed="no"
              InstallCondition="NOT VersionNT64"/>
</Chain>

В MSI для моего продукта я создал несколько условий управления версиями, которые отображают диалоговое окно с ошибкой, если оно совпадает используя настраиваемое действие.

<Upgrade Id="PUT-GUID-HERE">
  <UpgradeVersion OnlyDetect="yes" Property="SELFFOUND" Minimum="!(bind.FileVersion.MainEXE)" IncludeMinimum="yes" Maximum="!(bind.FileVersion.MainEXE)" IncludeMaximum="yes" />
  <UpgradeVersion OnlyDetect="yes" Property="NEWERFOUND" Minimum="!(bind.FileVersion.MainEXE)" IncludeMinimum="no" />
  <UpgradeVersion OnlyDetect="yes" Property="PREVFOUND_IA" Minimum="1.0.0.0" IncludeMinimum="yes" Maximum="4.11.7312.0" IncludeMaximum="yes" />
  <UpgradeVersion OnlyDetect="no" Property="PREVIOUSFOUND" Minimum="4.11.7313.0" IncludeMinimum="yes" Maximum="!(bind.FileVersion.MainEXE)" IncludeMaximum="no" />
</Upgrade>

<CustomAction Id="UninstallOldAlert" Error="[ProductName] is already installed. Please remove via Add/Remove Programs first." />
<CustomAction Id="AlreadyUpdated" Error="[ProductName] is already installed." />
<CustomAction Id="NoDowngrade" Error="A later version of [ProductName] is already installed." />

<InstallExecuteSequence>
  <RemoveExistingProducts After="InstallInitialize">PREVIOUSFOUND</RemoveExistingProducts>
  <Custom Action="UninstallOldAlert" After="FindRelatedProducts">PREVFOUND_IA</Custom>
  <Custom Action="AlreadyUpdated" After="FindRelatedProducts">SELFFOUND</Custom>
  <Custom Action="NoDowngrade" After="FindRelatedProducts">NEWERFOUND</Custom>
</InstallExecuteSequence>

Если я запускаю только MSI-файл, он правильно отображает сообщение об ошибке и закрывается, однако, когда я запускаю загрузчик, он просто пропускает и устанавливает зависимости. Что я хочу сделать, это передать ошибку до загрузчика, но я не могу найти какие-либо инструкции о том, как это сделать? Я попытался установить DisplayInternalUI для пакета в комплекте, но это не имеет никакого эффекта.

Сообщение, которое я вижу при запуске MSI и хочу увидеть в загрузчике, - это CustomAction под названием "UninstallOldAlert"

Рад предоставить больше информации, если требуется, заранее спасибо.

ОБНОВЛЕНИЕ:

Я также пытался использовать элемент Condition в моем элементе Product, но это имеет такое же поведение, когда он передает успех загрузчику. (

1 Ответ

0 голосов
/ 14 января 2020

Burn не запускает устаревшие пакеты. Вы можете проверить это в журнале пакетов, чтобы увидеть, что Burn обнаружил и запланировал для вашего пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...