Msiexec REINSTALL = ALL REINSTALLMODE = vamus ничего не переустанавливает - PullRequest
1 голос
/ 13 февраля 2009

В основном я пытаюсь обновить свое приложение, и, насколько я понимаю, следующее должно безоговорочно переустановить все компоненты: msiexec / i myapp.msi REINSTALL = ALL REINSTALLMODE = vamus

В подробном журнале я вижу: MSI (s) (A0: 60) [15: 40: 10: 948]: компонент: A; Установлено: Локальное; Запрос: Null; Действие: Нуль

MSI (s) (A0: 60) [15: 40: 10: 948]: компонент: B; Установлено: Локальное; Запрос: Null; Действие: Нуль

MSI (s) (A0: 60) [15: 40: 10: 948]: компонент: C; Установлено: Локальное; Запрос: Null; Действие: Нуль

MSI (s) (A0: 60) [15: 40: 10: 948]: компонент: D; Установлено: Локальное; Запрос: Null; Действие: Нуль

и т. Д. Для каждого компонента. Если я удаляю или переименовываю файл из папки назначения, он правильно установит новую версию, однако, если файл существует в этом месте, он будет игнорировать его вместо замены его копией в текущем файле msi.

Кто-нибудь знает, что может пойти не так?

Редактировать: установщик был создан в WiX. Идентификатор продукта и код UpgradeCode остаются неизменными, а PackageID установлен на *, поэтому для каждой сборки должен создаваться новый код, поэтому, насколько я знаю, он должен быть правильным

Ответы [ 4 ]

2 голосов
/ 13 февраля 2009

Это довольно сложно понять, у меня была такая же проблема. Для выполнения установки обновления пакет обновления должен содержать ВСЕ компоненты из исходного пакета. Это означает, что вы не можете удалить компонент никогда. Вы можете удалить файлы из компонента, даже все из них, но вы не можете удалить компонент. В противном случае установка обновления на самом деле ничего не сделает при выполнении патча или небольшого обновления. ComponentID хранятся в реестре Windows, и служба установщика Windows использует их для проверки, установлен компонент в системе или нет.

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

Если это все еще не работает, вы должны выбрать новую установку и самим выяснить, что нужно обновить.

В качестве альтернативы вы можете сделать основное обновление, которое выполняет деинсталляцию с последующей установкой. Установщик Windows не заботится о структуре Feature-Component таким образом.

1 голос
/ 16 июня 2011

Установщик Windows будет активно предотвращать понижение бинарных файлов до такой степени, что это трудно сделать даже при использовании «чистой силы», как вы делаете с REINSTALLMODE = amus. Это часть стратегии Microsoft по предотвращению «ада DLL», существовавшего в первые дни Windows. В те дни можно было перезаписать системные DLL-файлы более старыми версиями и, следовательно, сломать вещи влево, вправо и везде. Установщик Windows имеет несколько уровней защиты для предотвращения понижения версии двоичных файлов.

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

Есть сложности даже с серьезными обновлениями в отношении понижения. Вы должны упорядочить удаление существующего продукта на раннем этапе InstallExecuteSequence, чтобы старый продукт был удален из системы до того, как установщик Windows проанализирует систему слишком много во время расчета стоимости файла. Эта операция сравнивает состояние системы с файлами в MSI и определяет, какие файлы необходимо (пере) установить. Если логика версии указывает, что файл в MSI является более ранней версией, конечный результат может заключаться в том, что файл на диске удаляется, а старый файл вообще не устанавливается. Может потребоваться удалить файл с диска заранее с помощью специального действия, чтобы сделать понижение надежности надежным, или использовать папку установки, в которой абсолютный путь к целевой папке назначения отличается в разных выпусках. Это обманет MSI "стоимость файла", чтобы не видеть файл, установленный в том же месте:

% ProgramFiles% \ Моя компания \ Мой продукт \ 1 % ProgramFiles% \ Моя компания \ Мой продукт \ 1.1

Мне не нравится эта папка установки "движущаяся цель" - по моему мнению, MSI-файл не должен устанавливаться, но это может решить вашу проблему.

0 голосов
/ 27 января 2017

У меня была такая же проблема.

Для меня сработало полное удаление REINSTALL = ALL REINSTALLMODE = vamus

Я думаю, что основной проблемой была опция v в режиме REINSTALL, как указано в документации по ссылке ниже: «Не используйте код опции v reinstall для первой установки приложения или функции», установка новой версии моего продукта поверх старой.

https://msdn.microsoft.com/en-us/library/windows/desktop/aa371182(v=vs.85).aspx

0 голосов
/ 13 февраля 2009

Обновили ли вы номер версии и настроили ли обновление?

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