5

我已经看到了许多自动化我的 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 自动化接口- 我已经关注了许多关于此的示例和教程,但都以相同的结果结束。当我调用以下代码时:

     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
4

2 回答 2

5

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

但是在您的情况下,您说它们都不起作用。你做了什么来诊断为什么?以下是我针对这些症状采取的第一步:

  • IsCmdBuild 构建的设置会产生 IDE 构建的错误。首先确定问题到底是什么。查看详细日志以获取更多信息。使用可用的 .msi 构建两种方式,并将结果与​​ MsiDiff 进行比较。确保您已经测试过升高。根据您的发现,它可能是项目、构建过程中需要解决的问题,或者是 InstallShield 中的错误。
  • 自动化接口产生 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-10-10T12:20:57.520 回答
0

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

最好的选择是使用 devenv.exe

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

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

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

于 2018-06-18T09:12:54.020 回答