Автоматизация сборки Installshield

Я видел много решений для автоматизации моей сборки InstallShield, но у меня проблемы с каждым из них. Я использую InstallShield Professional 2013. Извините за длительный вопрос, но я не знаю, в каком направлении идти, чтобы решить мои проблемы.

1) IsCmdBld.exe - У меня есть script, который запускает и будет строить мой установщик. НО, когда программа установки запускается, появляется сообщение об ошибке "The System Administrator has set policies to prevent this installation". Я не уверен, почему это происходит, но я не получаю то же сообщение об ошибке, если я создам установщик через конструктор. EDIT: Вот моя команда (% guid% - это Guid, которую я генерирую, чтобы установить код продукта):

for /f %%i in ('"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\uuidgen.exe"') do set guid=%%i

"C:\Program Files (x86)\InstallShield\2013 SP1 SAB\System\ISCmdBld.exe" -p "MyInstaller.ism" -r SingleImage -y "1.0.0.13" -z ProductCode=%guid%

2) Интерфейс автоматизации InstallShield - Я последовал за множеством примеров и руководств по этому вопросу, но все закончилось тем же результатом. Когда я вызываю следующий код:

     var project = new ISWiAuto20.ISWiProject();

Я получаю эту ошибку:

Unable to cast COM object of type 'System.__ComObject' to interface type 
'ISWiAuto20.ISWiProject'. This operation failed because the QueryInterface call 
on the COM component for the interface with IID '{872D23A7-C18D-468C-895D-1CF027E4FBB1}' 
failed due to the following error: Library not registered. 
(Exception from HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)).

3) MsBuild.exe - Запуск MsBuild в моем файле проекта InstallShield дает эту ошибку:

error NSB4025: The project file could not be loaded. Invalid character in the 
   given encoding. Line 1, position 1

Ответ 1

Выбор между этими подходами (когда все они работают) во многом зависит от системы сборки, с которой вы пытаетесь интегрироваться. Если вы используете пакетный или make файл, IsCmdBld.exe, вероятно, самая простая отправная точка. Если вы используете Visual Studio и TFS или MSBuild, вам, вероятно, повезет больше, поскольку он будет сообщать об ошибках способом, который может понять система сборки. (Помимо этого, они принципиально похожи.) Если вам нужно внести изменения в проект до его создания, уровень автоматизации может либо увеличить, либо заменить другие подходы.

Но в вашем случае вы говорите, что все они не работают. Что вы сделали, чтобы диагностировать, почему? Вот первые шаги, которые я предприму для каждого из этих симптомов:

  • Встроенные установки IsCmdBuild приводят к ошибке, которую не поддерживают IDE-build. Сначала определите, в чем проблема. Дополнительную информацию смотрите в подробном журнале. Создайте оба способа с доступным .msi и сравните результаты с MsiDiff. Убедитесь, что вы испытали повышенный уровень. В зависимости от того, что вы найдете, это может быть что-то, что нужно решить в проекте, процессе сборки или ошибке в InstallShield.
  • Интерфейс автоматизации дает TYPE_E_LIBNOTREGISTERED. Прежде всего, если это IDE-машина, рассмотрите возможность восстановления установки. Если это автономная машина, то же самое. Если это автономная машина, которая не использовала установку, вы должны или, по крайней мере, должны убедиться, что существуют зависимости и что интерфейс автоматизации зарегистрирован. Во-вторых, как отметил Кристофер Пэйнтер, InstallShield - это 32-разрядный продукт, поэтому он должен быть вызван из 32-битного контекста. Если вы звоните, скажем, в CScript, чтобы запустить файл .vbs, убедитесь, что вы используете C:\Windows\SysWow64\CScript.exe.
  • MSBuild NSB4025. Комментарий от stijn в значительной степени прав - вы не можете вызывать MSBuild в файле .ism(хотя это может быть xml вместо двоичного, это не совместимо с MSBuild). Однако вы можете создать файл .isproj, который может работать корректно. Сохраните проект в Visual Studio или скопируйте <InstallShield>\Support\0409\MSBuild.xml в (ProjectName).isproj и настройте его содержимое; вызовите MSBuild в результирующий файл .isproj. Коэффициенты сильные, это будет иметь примерно такие же результаты, что и IsCmdBuild, поскольку часть сборки в основном разделена.