Всегда обновляйте файлы при незначительном обновлении (как сделать) - PullRequest
3 голосов
/ 01 июня 2009

Я создаю установочный пакет с помощью InstallShield Pro X. Обновление работает правильно. Однако менеджер продукта хочет, чтобы обновление заменяло все файлы при обновлении, даже если дата создания! = Дата изменения файла.

Я вижу, что для этого мне нужно установить REINSTALLMODE = vamus, а не vomus. Однако я не вижу, как сказать InstallShield, что я хочу использовать этот параметр. По умолчанию setup.exe всегда передает vomus установщику Windows.

В проекте InstallShield есть свойство с именем ReinstallModeText, которое я изменил с omus на amus, но, похоже, это никак не отразилось.

Итак, как мне установить в проекте установки, чтобы, когда setup.exe обнаруживает запуск обновления, он отправляет REINSTALLMODE = vamus? Спасибо.

Обновление: попытался добавить следующее к значению командной строки MSI в разделе Release:

REINSTALLMODE = vamus

Это не сработало. Setup.exe не установил REINSTALL = ALL в командной строке, что я сделал это. Я добавил это в командную строку MSI, и обновление работало, как и ожидалось. Но проблема не в том, что если это НОВАЯ установка, эти свойства все еще устанавливаются, и программа установки завершается ошибкой.

Ответы [ 4 ]

3 голосов
/ 03 июля 2009

Не установите для REINSTALLMODE значение amus или vamus ( принудительная перезапись файлов ). Эти настройки применяются ко всем компонентам в MSI и, следовательно, теоретически могут понизить системные файлы или, по крайней мере, общие файлы - , обычно это файлы, включенные через модули слияния . Обычно безопасно установить REINSTALLMODE на emus ( заменить файлы с более низким или равным номером версии ). Даже это может вызвать ошибку замены файла , если вы попытаетесь перезаписать защищенный системой файл в более новых версиях Windows с Защита ресурсов Windows ( Википедия ) (Windows Server 2008 и Vista). В более старых версиях Windows файл, вероятно, будет перезаписан, а затем восстановлен в правильной версии из dllcache с помощью функции защиты файлов Windows , при условии, что эта функция удачного дня. Был (и есть) связанный инструмент для проверки системных файлов: Проверка системных файлов .

Если у вас есть проблемы с файлами, которые следует заменить, даже если они были отредактированы, вы можете использовать таблицу RemoveFile , чтобы запланировать удаление файла во время установки (а затем он будет переустановлен).

Реальное решение состоит в том, чтобы рассматривать папку установки в% ProgramFiles% только для чтения, и приложение не должно сохранять ЛЮБЫЕ настройки или изменять какие-либо файлы. Все файлы конфигурации должны быть в профиле пользователя или в профиле alluser, а EXE-файл приложения должен отвечать за копирование в расположение профиля.

См. мой ответ здесь .

2 голосов
/ 18 сентября 2009

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

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

1 голос
/ 03 июня 2009

Вы упомянули, что использовали ReinstallModeText с «amus». Вы пробовали ReinstallModeText, равный "vamus". «V» заставляет установщик запускаться из исходного пакета, а не из кэшированного пакета, и это может быть вашей проблемой.

1 голос
/ 03 июня 2009

У меня нет удобного IS X, но в более поздних версиях InstallShield вы должны были перейти к «Выпускам», выделить ваш выпуск, перейти к разделу «Setup.exe», и есть поле под названием «Аргументы командной строки MSI» , Там вы должны указать любые аргументы командной строки, которые вы хотите, чтобы Setup.exe передавал установщику Windows. Например. REINSTALLMODE = vamus

...