Вопрос по – Почему мой новый файл установщика Windows (MSI) не устанавливается должным образом поверх более старой версии MSI?

3
Symptoms

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

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

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

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

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

Possible Cause

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

Other Information

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

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

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

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

Спасибо!

Ваш Ответ

1   ответ
5

PackageCode а такжеProductVersion?

"The reason why I am scratching my head is that by the time the InstallFiles action executes the destination file no longer resides on the disk."

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

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

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

Увеличение версии файла (частично) решило проблему. Я на самом деле испытывал несколько разных проблем одновременно. Но удаление старых компонентов (но с более новыми номерами версий) прошло, когда я поднял версию нового компонента до 5.0. *. Спасибо! Peter Stephens

Похожие вопросы