Installshield构建自动化

gwi*_*003 5 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%
Run Code Online (Sandbox Code Playgroud)

2)InstallShield自动化接口 - 我已经遵循了许多关于此的示例和教程,但都以相同的结果结束.当我调用以下代码时:

     var project = new ISWiAuto20.ISWiProject();
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

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)).
Run Code Online (Sandbox Code Playgroud)

3)MsBuild.exe - 在我的InstallShield项目文件上运行MsBuild会产生以下错误:

error NSB4025: The project file could not be loaded. Invalid character in the 
   given encoding. Line 1, position 1
Run Code Online (Sandbox Code Playgroud)

Mic*_*man 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的结果大致相同,因为构建部分主要是共享的.

  • 除非2013年发生变化,否则由于COM对象,以前版本的InstallShield需要在32位进程中运行.如果我通过TFS使用MSBuild,我必须选择x86 MSBuild,否则我将获得COM异常. (2认同)