Installshield构建自动化

时间:2013-10-09 20:09:19

标签: msbuild installshield

我已经看到了许多自动化我的InstallShield构建的解决方案,但我遇到了每个问题。我正在使用InstallShield Professional 2013.抱歉这个冗长的问题,但是我对于解决问题的方向一无所知。

1)IsCmdBld.exe - 我有一个运行的脚本,并将构建我的安装程序。但是,当安装程序运行时,我收到一条显示"The System Administrator has set policies to prevent this installation"的错误消息。我不确定为什么会发生这种情况,但如果我通过设计器构建安装程序,则不会收到相同的错误消息。编辑:这是我的命令(%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 Automation Interface - 我已经对此进行了大量的示例和教程,但所有结果都是相同的。当我调用以下代码时:

     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 - 在我的InstallShield项目文件上运行MsBuild会产生此错误:

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

2 个答案:

答案 0 :(得分:5)

这些方法之间的选择(当它们全部工作时)在很大程度上取决于您尝试集成的构建系统。如果您使用批处理或makefile方法,IsCmdBld.exe可能是最简单的起点。如果您使用的是Visual Studio和TFS或MSBuild,那么您可能会有更多的运气,因为它会以构建系统可以理解的方式报告错误。 (除此之外,它们基本相似。)如果您需要在构建之前对项目进行调整,那么自动化层可以增加或替换其他方法。

但在你的情况下,你说他们都不行。你做了什么来诊断原因?以下是我为这些症状采取的第一步:

  • IsCmdBuild构建设置会产生IDE构建的错误。首先确定问题的真正含义。查看详细日志以获取更多信息。使用.msi构建两种方式,并将结果与​​MsiDiff进行比较。确保你已经测试过高架。根据您找到的内容,可能需要在项目中解决,构建过程或InstallShield中的错误。
  • Automation Interface产生TYPE_E_LIBNOTREGISTERED。首先,如果这是IDE机器,请考虑修复安装。如果它是一个独立的构建机器,同上。如果它是不使用安装的独立构建机器,您应该,或者至少应该确保存在依赖关系并且注册了自动化接口。其次,正如Christopher Painter所说,InstallShield是一个32位产品,因此必须从32位上下文调用它。如果您正在调用CScript来运行.vbs文件,请确保您使用的是C:\Windows\SysWow64\CScript.exe
  • MSBuild NSB4025。来自stijn的评论在很大程度上是正确的 - 你不能在.ism文件上调用MSBuild(虽然它可以是xml而不是二进制,但它不是MSBuild兼容的)。但是,您可以创建可以正常工作的.isproj文件。将项目保存在Visual Studio中,或将<InstallShield>\Support\0409\MSBuild.xml复制到(ProjectName).isproj并调整其内容;在生成的.isproj文件上调用MSBuild。赔率很高,这与IsCmdBuild的结果大致相同,因为构建部分主要是共享的。

答案 1 :(得分:0)

使用MSBuild不遵循解决方案.sln文件中指定的Project文件的确切顺序。

最好的选择是使用devenv.exe

有时,devenv没有返回确切的返回状态,所以我保留了一个exe来扫描日志文件以获取成功代码。

https://devopsdiaryblog.wordpress.com/2017/12/20/devenv-return-code-issue/

对于iscmdbuild.exe,最好使用命令行,因为它是来自flexera的建议。