Как программно изменить код товара
Я создал bat файл для автоматической сборки. Это установщик моего продукта. Но проблема в том, что перед запуском скрипта автоматической сборки мне нужно вручную изменить код продукта с экрана установки. Итак, есть ли способ изменить код продукта автоматически? потому что все автоматически, кроме кода продукта.
2 ответа
Как говорит Фил, вы можете сделать это через интерфейс автоматизации COM для Installshield, но есть и другие способы, как описано здесь: Installshield Build Automation.
По существу:
Ссылка выше показывает небольшой пример того, как использовать исполняемый файл автономной сборки ISCmdBld.exe, который вы, возможно, уже используете.
- Что-то вроде:
"[PATHHERE]ISCmdBld.exe" -p "MyInstaller.ism" -r SingleImage -y "1.0.0.13" -z ProductCode=%guid%
, - Проверьте вышеприведенную ссылку - я никогда не использовал ISCmdBld.exe, выбирая вместо автоматизации COM.
- Что-то вроде:
Связанный ответ также объясняет, как использовать msbuild, прочитайте ответ Урмана.
Наконец, вы можете использовать интерфейс автоматизации COM и VBScript (или Javascript?), И ниже я добавил небольшой пример того, как это может работать.
У меня нет Installshield 2013, но вот очень грубый набросок того, как можно автоматизировать последнюю версию 2016 с помощью автоматизации COM с помощью VBScript:
' On Error Resume Next
Set isproject = CreateObject("ISWiAuto23.ISWiProject")
isproject.OpenProject "C:\InstallShield 2016 Projects\TestProject.ism", False
Set isproductconfig = isproject.AddProductConfig("MyNewProduct_1.0.16")
isproductconfig.ProductName = "MyNewProduct_1.0.16"
isproductconfig.ProductVersion = "1.0.16"
isproductconfig.ProductCode = isproject.GenerateGUID
' lots of properties to set, the above should normally suffice I think...
Set isrelease = isproductconfig.AddRelease("MyNewRelease_1.0.16")
isrelease.Compressed = True
isrelease.SetupEXE = True
' lots of properties to set...
' Save and build project
isproject.SaveProject ' For some reason the project won't save properly after it is built
isrelease.Build
isproject.SaveProject
' Report error status
WScript.Echo "Number of Build Errors: " & CStr(isrelease.BuildErrorCount)
WScript.Echo "Number of Build Warnings: " & CStr(isrelease.BuildWarningCount)
isproject.CloseProject
Этот сценарий не был тщательно протестирован, и, как ни странно, новая конфигурация и выпуск продукта не сохраняются, если вы не сохраните их перед запуском сборки. Это может быть что-то простое, что я перепутал, или это может быть ошибка в инструменте (это будет не первая ошибка).
Возьмите его таким, какой он есть, будем надеяться, что это заставит вас самим позаботиться о грызунах (ошибки). Я думаю, что это может работать, если вы измените ISWiAuto23.ISWiProject
в IswiAuto20.ISWiProject
в соответствии с версией COM-сервера Installshield 2013.
Важно, что вы должны запустить VBScript из 32-bit CScript.exe / WScript.exe
(не спрашивайте меня, почему). Просто вставьте ярлык C:\Windows\SysWOW64\cscript.exe
на рабочем столе для тестирования и перетащите на него свой скрипт, или, что еще лучше, откройте командную строку и перейдите к C:\Windows\SysWOW64
(хотите верьте, хотите нет - это 32-битная папка, а папка System32 64-битная (!) - только в Windows!), а затем введите cscript.exe [FullPathToVBScript]
, Очевидно, не забудьте закрыть файл ISM в графическом интерфейсе Installshield перед запуском скрипта.
Мне нравится тот факт, что вы можете сохранить новый выпуск и конфигурацию продукта в файле *.ism, чтобы у вас была запись скомпилированных выпусков. Я не уверен, что делает ISCmdBld.exe.
Я думаю, что вы должны использовать автоматизацию InstallShield для таких вещей, как объект ISWiProductConfig, который предоставляет ProductCode MSI, который вы создаете.