WIX Installer - есть ли какой-нибудь автоматизированный способ управления ID продукта / кодом? - PullRequest
1 голос
/ 13 января 2020

Я разрабатываю Windows Установщик службы с помощью Wix. Из того, что я понимаю, я должен генерировать уникальный ID продукта для каждой версии сервиса. Это легко сделать, установив «*» в атрибуте Product Id. Однако, когда я делаю это и перестраиваю установщик, он генерирует разные руководства для каждой сборки. Когда у меня уже установлена ​​какая-либо версия службы на моем компьютере, это вызывает несколько проблем: т.е. файл 'exe', остающийся после завершения процесса удаления, несколько раз входит в Программы в Панели управления.

После некоторого исследования я обнаружил, что что решение этой проблемы заключается в обновлении идентификатора продукта вручную каждый раз, когда изменяется номер версии службы. Или, может быть, я что-то упускаю?

В любом случае, вопрос заключается в следующем: есть ли способ сделать этот процесс автоматизированным, так что guid будет одинаковым каждый раз, когда я создаю одну и ту же версию сервиса, но меняю только когда версия обновлена? Какой-нибудь внешний инструмент для Wix?

1 Ответ

1 голос
/ 13 января 2020

Автоматизация сборки : автоматизацию сборки можно использовать несколькими способами для автоматизации создания новых идентификаторов GUID продукта и т. П. Вы должны передать значения в файл проекта WiX и тому подобное, но, возможно, это не то, что вы хотите сохранить. Позвольте мне добавить еще один вариант ниже.


Major Upgrade Element : Я полагаю, у вас есть основной элемент апгрейда? Он заботится об удалении предыдущей версии, если настроен правильно. Обычно вы видите несколько версий в «Установка и удаление программ», когда вы перестраиваете ту же версию и устанавливаете поверх последней установки.

Предложение : вы можете вручную настроить таблицу обновлений для удаления "same version installations". Вы берете «auto-magi c» из "MajorUpgrade" element и делаете все самостоятельно с помощью Upgrade elements (более старый способ настройки Upgrade table , что дает более подробный контроль):

Удалите это (или просто закомментируйте его):

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

Добавить это :

<!-- The top of your new source - compiler variables, can be overridden at compile time via candle.exe and light.exe switches -->
<?xml version="1.0" encoding="UTF-8"?>
<?define MyProductVersion = "2.0.0.0" ?>
<?define MyUpgradeCode = "88888888-7777-7777-7777-888888888888" ?>

<..>

<Upgrade Id="$(var.MyUpgradeCode)">
  <UpgradeVersion Minimum="$(var.MyProductVersion)" OnlyDetect="yes" IncludeMinimum="yes" Property="DOWNGRADE_DETECTED"  />
  <UpgradeVersion Property="PRODUCTLINE1" IncludeMinimum="yes" IncludeMaximum="yes" Maximum="$(var.MyProductVersion)" Minimum="0.0.0"  />
</Upgrade>

<..>

<!-- You have to add RemoveExistingProducts to the InstallExecuteSequence table -->
<InstallExecuteSequence>
  <!-- Potential scheduling (after): InstallValidate, InstallInitialize, InstallExecute, InstallExecuteAgain, InstallFinalize -->
  <RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>

Сводка : вышеизложенное должно позволить вам пересобрать настройки и установить любое число раз, используя тот же номер версии, и процесс установки удалит предыдущую установку "автоматически". Пожалуйста, проверьте. Нет гарантий. Закон Мэрфи. Et c ...: -).


Некоторые ссылки :

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