Как вы определяете установленные версии продукта при каждом запуске? - PullRequest
0 голосов
/ 26 июня 2018

Эта проблема, по сути, состоит в том, чтобы избежать проблемы, которую я не буду решать

Когда я один раз устанавливаю свой продукт и снова использую MSI, процесс выгрузки выполняется. Однако это не удаляет остаточную информацию из реестра, которую необходимо очистить с помощью «Очистки установщика Windows», и при переустановке возникает проблема с разрешением реестра.

Я видел Проверка старых версий , однако было обнаружено, что FindRelatedProducts выполняется только при первой установке, то есть, когда я снова установил MSI, FindRelatedProducts этого не сделал.

<Upgrade Id='YOURGUID-7349-453F-94F6-BCB5110BA4FD'>
<UpgradeVersion OnlyDetect='yes' Property='SELFFOUND'
    Minimum='1.0.1' IncludeMinimum='yes'
    Maximum='1.0.1' IncludeMaximum='yes' />
<UpgradeVersion OnlyDetect='yes' Property='NEWERFOUND'
    Minimum='1.0.1' IncludeMinimum='no' />
</Upgrade>

<CustomAction Id='AlreadyUpdated' Error='Foobar 1.0 has already been updated to 1.0.1 or newer.' />

<InstallExecuteSequence>
    <Custom Action='AlreadyUpdated'     After='FindRelatedProducts'>SELFFOUND</Custom>
    <Custom Action='NoDowngrade' After='FindRelatedProducts'>NEWERFOUND</Custom>
</InstallExecuteSequence>

Так что я хотел бы спросить вас, ребята Как проверить каждый раз, когда я запускаю MSI, когда я его установил? Установлена ​​ли и та же версия? Если установлена ​​та же версия, выйдите из процесса установки.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

MSI Zapping : Я не уверен, что именно вы сделали - вы, кажется, выгнули установленный MSI - что вообще не рекомендуется. Это может вызвать серьезные проблемы - вплоть до полного повреждения базы данных MSI в реестре.

Впрочем, обо всем по порядку:

Элемент MajorUpgrade : Вы можете использовать более удобные MajorUpgrade Element вместо используемых элементов более старого стиля. Вот элементы обновления старого стиля, которые используются . Непосредственно ниже приведен образец более современного, MajorUpgrade convenience element в действии:

<MajorUpgrade Schedule="afterInstallInitialize" 
              DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." 
              AllowDowngrades="no" AllowSameVersionUpgrades="no" />

Возможно, попробуйте этот элемент вместо тех, которые вы используете. Просто закомментируйте старые и замените этим простым элементом. Если вы делаете это правильно, ваше основное обновление должно работать «из коробки». Убедитесь, что вы указали UpgradeCode в Элемент продукта . См. документацию для основных обновлений


Соответствующие ссылки:


Я не полностью понял этот раздел вашего вопроса : " Когда я один раз устанавливаю свой продукт и снова использую MSI, процесс выгрузки выполняется. Однако это не удаляет остаточную информацию из реестра, которую необходимо очистить с помощью «Очистки установщика Windows», а при переустановке возникает проблема с разрешением реестра .

  • Застревание : Что именно вы сделали? Зап установки? Зачем? Вы должны быть в состоянии успешно удалить из Add / Remove programs? Это удаление не удалось? Что такое сообщение об ошибке при переустановке?
  • Изменить / Восстановить : MSI автоматически определит, когда он уже установлен в той же версии. Затем вы увидите диалоговое окно изменения / исправления установки, а не диалоговое окно установки в первый раз.
    • Эти диалоговые окна изменения отображаются, только если дважды щелкнуть исходные файлы MSI, использованные для установки, без перекомпоновки. Или вы вызываете изменение из раздела «Установка и удаление программ».
    • Если вы перестроите свою настройку, у нее будет как минимум новый GUID пакета, и MSI обнаружит, что только что созданный MSI не тот, который уже установлен, и появится сообщение об ошибке. Теперь вы можете удалить текущую версию из раздела «Установка и удаление программ».
  • Сопутствующие товары : MSI также обнаружит, если установлены соответствующие версии, если вы правильно разработали таблицу обновлений - как вы, кажется, делаете.
    • Если вы генерируете новый GUID продукта каждый раз при компиляции, вы сможете установить новую версию «поверх» или «рядом» с более старой установкой, если только вы не создаете таблицу обновления - в в этом случае старая версия должна быть автоматически удалена при установке новой версии.

Вы должны понимать код пакета, код продукта и код обновления. Код пакета генерируется автоматически для каждой компиляции и сборки. Код продукта, который вы можете установить для автоматической генерации, установив для него значение * в элементе продукта, или вы можете жестко закодировать его и при необходимости изменить. Код обновления должен оставаться прежним после определения. Пожалуйста, Google разница между этими кодами - у меня нет времени, чтобы закончить это объяснение прямо сейчас.

0 голосов
/ 26 июня 2018

Когда вы снова запускаете «тот же» MSI, он переходит в режим обслуживания, часто просто для ремонта. Windows даже не нужно использовать MSI, который вы используете для этой «установки», потому что она использует исходный MSI для установки, который может быть или не быть тем, который вы пытаетесь установить снова. Так что неясно, что вы подразумеваете под «процессом выгрузки» или что вы ожидаете от того же MSI.

FindRelatedProducts для крупных обновлений, но это означает увеличение ProductVersion и изменение ProductCode. Запуск того же MSI не вызывает серьезного обновления (см. Элемент WiX MajorUpgrade).

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

...