Почему мой новый файл установщика Windows (MSI) не устанавливается должным образом поверх более старой версии MSI? - PullRequest
3 голосов
/ 18 июня 2009

Симптомы

Я недавно создал установочный пакет (MSI), который устанавливает новую версию моего приложения.

У меня есть новый ProductCode для моей установки, но я оставил UpgradeCode таким же.

Поэтому, когда я запускаю новый MSI, он сначала правильно удаляет старую версию. Даже каталог Program Files \ MyProduct удаляется.

Но после удаления старой версии программа установки лишь частично устанавливает новую версию. Если я восстановлю поврежденную новую установку (используя «Установка и удаление программ»> «Изменить установку»> «Восстановить»), все исправлено.

Если я сначала удаляю старую версию, используя «Установка и удаление программ», а затем устанавливаю новую версию, все работает отлично. Проблема возникает только тогда, когда я устанавливаю новую версию поверх старой версии.

Возможная причина

Номера версий для различных dll и exe в старой версии были перепутаны. Старая версия exe - 4.11.1234. Версия для нового exe 4.5.1234. Согласно «Правилам управления версиями файлов» новый файл не будет перезаписывать старый файл. Причина, по которой я чешу голову, состоит в том, что к тому времени, когда действие InstallFiles выполняет целевой файл, он больше не находится на диске.

Другая информация

Я нацеливаюсь на установщик Windows 3.1.

Моя последовательность выполнения установки примерно равна:

...
InstallValidate
RemoveExistingProducts
InstallInitialize
...
InstallFiles
...
InstallExecute
InstallFinalize
....

Если этот контекст не проясняет вопрос, дайте мне знать ...

Спасибо!

1 Ответ

5 голосов
/ 19 июня 2009

Полагаю, вы также изменили PackageCode и ProductVersion?

«Причина, по которой я чешу свой голова в том, что к тому времени Действие InstallFiles выполняет файл назначения больше не находится на диск. "

Да, но MSI принимает решение установить / не устанавливать файлы до физического удаления файлов - это решение принимается во время 1-го прохода последовательности InstallExecute, когда файлы все еще находятся на жестком диске.

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

Другой вариант: вы используете InstallShield? Вы можете установить одно из двух свойств для отдельных файлов, которые решат проблему: 1) Всегда перезаписывать, 2) Переопределять версию системы. «Always Overwrite» автоматически установит номер версии на 65535.0.0.0, тем самым включив установку. «Переопределить версию системы» позволяет вам ввести собственную версию, более высокую, чем реальная версия файла, и, таким образом, также включить установку. Щелкните правой кнопкой мыши файл и выберите Свойства, чтобы установить эти параметры.

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