Ответ 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, поскольку часть сборки в основном разделена.