Как обновить имя папки в проекте InstallShield для раздела Registry от Powershell?
У меня есть скрипт powershell, который обновляет имя продукта, версию, код продукта, ярлык и т. Д. Программы установки.
Но я не знаю, как обновить имя конкретной папки, созданной в разделе " Реестр ", который сам присутствует в разделе " Конфигурация системы " проекта InstallScript MSI в InstallShield 2015.
Последовательность папок в этой форме - HKEY_LOCAL_MACHINE \ SOFTWARE \ Demo \ 12.1.0.0
Я хочу, чтобы значение папки 12.1.0.0 было обновлено до 13.1.0.0 с помощью функций автоматизации InstallShield.
Любая помощь по этому вопросу будет принята с благодарностью.
1 ответ
Я предполагаю, что вы автоматизируете генерацию новой версии продукта как часть системы сборки с использованием автоматизации COM? На секунду мне стало интересно, копались ли вы прямо в реестре после установки. Я предполагаю, что это автоматизация COM.
Я испытал некоторое "столкновение" с объектной моделью Installshield - просто чтобы вы были предупреждены. Вот пример того, как автоматизировать создание новой сборки / выпуска с использованием автоматизации COM и VBScript: Как программно изменить код продукта (для справки, у вас это уже есть). У меня были проблемы с функцией сохранения после сборки. Это может быть что-то, что я испортил.
Вместо того, чтобы удалять и добавлять компоненты, я бы упростил это, сделав новый компонент "универсальным" и "повторно используемым" с помощью [ProductVersion] property
вместо жесткого кодирования версии продукта (дайте компоненту новый GUID, когда и если вы сделаете это изменение, так как путь ключа будет перемещаться).
Это означает, что ваш компонент запишет это в реестр: HKLM\Software\Demo\[ProductVersion]
, Это будет "движущейся целью", когда вы компилируете новые версии вашего приложения (путь ключа изменится). Из-за этого вы должны генерировать новый GUID для компонента в каждой сборке. Это легко с помощью автоматизации (гораздо проще и надежнее, чем добавление и удаление компонентов, которые в моем опыте будут подвержены ошибкам и исключениям во время выполнения):
' This is for Installshield 2018 - change 24 to 23, 22, etc... depending on IS version
Set isproject = CreateObject("ISWiAuto24.ISWiProject")
isproject.OpenProject "C:\InstallShield 2018 Projects\My Project Name-6.ism", False
' Retrieve existing component and assign a new GUID. Should be all that is needed?
Set mycomponent = isproject.ISWiComponents.Item("NewComponent1")
mycomponent.Guid = isproject.GenerateGUID()
isproject.SaveProject
isproject.CloseProject
Вы должны проявлять осторожность в отношении того, что вы пишете в реестр с помощью этого компонента (он должен перезаписывать все при переустановке / обновлении, так как путь ключа перемещается). Пишите только статические настройки - настройки, которые не требуется изменять приложением. И я буду очень осторожен с любыми лицензионными ключами (могут быть сброшены при ремонте, самовосстановлении и обновлении).
Мораль этой истории: всегда проверяйте все режимы установки: установка, удаление, восстановление, изменение, самовосстановление, исправление, серьезное обновление, незначительное обновление и т. Д.
Также обратите внимание, что проекты MSI Installscript, как известно, содержат ошибки, и, честно говоря, я вообще не рекомендую их использовать. По моему опыту, их особенно сложно правильно обновить. Вместо этого используйте Basic MSI для более удобной настройки. Это значительно лучше для корпоративного развертывания. Корпоративные упаковщики приложений глубоко вздыхают, когда им приходится иметь дело с MSI Installscript. Я боюсь только правды (это проблемный беззвучный бег, который является главной проблемой, и другие проблемы).
ОБНОВЛЕНИЕ: Следует изменять GUID компонента всякий раз, когда изменяется путь к ключу компонента (абсолютный путь установки). Этот ответ пытается лучше объяснить, почему это технически необходимо: Изменить GUID компонента в wix?