Всегда обновляйте файлы при незначительном обновлении (как сделать)
Я создаю установочный пакет с помощью 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 ответа
При дальнейшем изучении этого вопроса и тестировании большего количества вариантов, я думаю, что лучшим ответом будет изменение кода продукта в дополнение к версии продукта и создание его в качестве основного обновления, которое сначала удаляет предыдущую версию, а затем устанавливает новые файлы.
Основная проблема заключается в том, что для установки требуется больше времени. Я также думаю, что вы не можете выпустить это как патч, но я могу ошибаться по этому поводу.
Не устанавливайте REINSTALLMODE на amus или vamus (принудительно перезаписывать файлы). Эти параметры применяются ко всем компонентам в MSI и, следовательно, теоретически могут понизить системные файлы или, по крайней мере, общие файлы - обычно это файлы, включенные через модули слияния. Обычно безопасно установить REINSTALLMODE на emus (заменить файлы с меньшим или равным номером версии). Даже это может вызвать ошибку замены файла, если вы попытаетесь перезаписать защищенный системой файл в более новых версиях Windows с защитой ресурсов Windows ( википедия) (Windows Server 2008 и Vista и более поздние версии). В более старых версиях Windows файл, вероятно, будет перезаписан, а затем восстановлен в правильной версии из dllcache с помощью функции защиты файлов Windows, при условии, что эта функция удачного дня. Был (и есть) связанный инструмент для проверки системных файлов: System File Checker.
Если у вас есть проблемы с файлами, которые следует заменить, даже если они были отредактированы, вы можете использовать таблицу RemoveFile, чтобы запланировать удаление файла во время установки (и тогда он будет переустановлен).
Реальное решение состоит в том, чтобы рассматривать папку установки в%ProgramFiles% только для чтения, и приложение не должно сохранять ЛЮБЫЕ настройки или изменять какие-либо файлы. Все файлы конфигурации должны быть в профиле пользователя или в профиле alluser, а EXE-файл приложения должен быть ответственным за копирование в расположение профиля.
Смотрите мой ответ здесь.
Вы упомянули, что использовали ReinstallModeText с "amus". Вы пробовали ReinstallModeText, равный "vamus". "V" заставляет установщик запускаться из исходного пакета, а не из кэшированного пакета, и это может быть вашей проблемой.
У меня под рукой нет IS X, но в более поздних версиях InstallShield вы должны были перейти к "Выпускам", выделить ваш выпуск, перейти к разделу "Setup.exe", и есть поле "Аргументы командной строки MSI". Там вы должны указать любые аргументы командной строки, которые вы хотите, чтобы Setup.exe передавал установщику Windows. Например, REINSTALLMODE=vamus