_isconfig.xml 中的 supportedRuntime 值在 ManagedInstall 期间导致错误 1001

Value of supportedRuntime in _isconfig.xml is causing Error 1001 during ManagedInstall

上个月(2016 年 3 月)我正在构建一个 InstallShield 2015 项目,其中一个组件的 .NET Installer Class 属性 设置为 Yes,一切似乎都运行良好。这个月我突然开始收到错误 1001,而 运行 同样的安装。看到错误来自这个 .NET Installer Class 组件,我决定关闭 .NET Installer Class 属性 作为测试。确实可以解决问题。但是我们有另一个构建系统,我们可以在其中构建完全相同的代码,并且一切仍然有效,这表明存在环境问题。

经过一些额外的研究,我发现文件 _isconfig.xml 显示了两个系统之间 supportedRuntime version 属性的不同值,我认为这是一个密切相关的指标的问题。其他研究表明此版本可能来自 InstallUtilLib.dll,这确实与我在两个系统上的 _isconfig.xml 中看到的版本相匹配。安装在 <supportedRuntime version="v4.0.30319"/> 下运行良好,在 <supportedRuntime version="v4.6.1055"/> 下安装失败。顺便说一句,较新的 InstallUtilLib.dll 的日期是 2015 年 11 月 5 日,所以我猜这个问题理论上可能是自该日期以来任何更新的结果。

我看到我的系统最近安装了一些 .NET Framework 更新,但是在搜索 Google 影响 InstallUtilLib.dll 的 Microsoft 更新时我却空手而归。那么我该如何确定这个问题以确定原因 and/or 解决方案?

MSI日志报这样的错误:

MSI (s) (58:14) [14:17:27:958]: Executing op: CustomActionSchedule(Action=_1A0C0EC89595D04ACFD3852EF29B12BD.install,ActionType=3073,Source=BinaryData,Target=ManagedInstall,CustomActionData=/installtype=notransaction /action=install /LogFile= "M:\MfgSys\System\FourthShift.SDKAdministrator.dll" "C:\Users\bmarty\AppData\Local\Temp\{C449BDEA-AA73-4FDE-A6AF-9116E1D7DEBB}\_isconfig.xml")
MSI (s) (58:20) [14:17:27:973]: Invoking remote custom action. DLL: C:\windows\Installer\MSI7282.tmp, Entrypoint: ManagedInstall
Error 1001.

您已经正确诊断出问题的直接原因。其余部分是由于 InstallShield 使用了它所指向的框架的错误版本。 (我相信在旧版本中它错误地使用了文件版本而不是 CLR 版本。)以下是我所看到的选项:

  • 停止使用安装程序类。它们很脆弱,难以调试,而且可能无法正确编写。另一方面,如果您习惯了它们,它们会非常方便和舒适。
  • 避免在构建机器上安装最新版本的 .NET。或者将相关文件从 4.0 框架复制到一个新文件夹,然后将 InstallShield 指向该文件夹。 (使用 Process Monitor 等工具确定完整集。)
  • 添加一个 post 处理步骤来调整 _isconfig.xml 值。
  • 使用可以正确检索版本的 InstallShield 版本。例如,如果您至少没有 InstallShield 2015 的服务包,请尝试一下。 (我认为我们发布了针对该问题的修复程序,尽管有一些迹象表明它只是部分修复程序。我们将在下一个版本中提供更好的修复程序,或者如果我们的支持团队收到足够多的请求,则更快。)