上个月(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-05,所以我想这个问题理论上可能是自该日期以来任何更新的结果。
我看到我的系统最近安装了一些.NET Framework更新,但是在Google搜索影响InstallUtilLib.dll
Microsoft更新时,我空手而归。那么我如何确定这个问题以确定原因和/或解决方案呢?
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:MfgSysSystemFourthShift.SDKAdministrator.dll" "C:UsersbmartyAppDataLocalTemp{C449BDEA-AA73-4FDE-A6AF-9116E1D7DEBB}_isconfig.xml")
MSI (s) (58:20) [14:17:27:973]: Invoking remote custom action. DLL: C:windowsInstallerMSI7282.tmp, Entrypoint: ManagedInstall
Error 1001.
您已正确诊断问题的直接原因。其余部分是由于 InstallShield 使用了它所指向的框架的错误版本。(我相信在旧版本中,它错误地使用文件版本而不是 CLR 版本。以下是我所看到的您的选择:
- 停止使用安装程序类。它们很脆弱,难以调试,而且可以说不可能正确编写。另一方面,如果您习惯了它们,它们可以非常方便和舒适。
- 避免在生成计算机上安装最新版本的 .NET。或者将相关文件从 4.0 框架复制到一个新文件夹,然后将 InstallShield 指向该文件夹。(使用进程监视器等工具确定完整集。
- 添加调整_isconfig.xml值的后处理步骤。
- 使用可正确检索版本的 InstallShield 版本。例如,如果您至少没有 InstallShield 2015 的服务包,请尝试一下。(我认为我们发布了针对此问题的修复程序,尽管有一些迹象表明它只是部分的。我们将在下一个版本中提供更好的修复,或者如果我们的支持团队收到足够的请求,我们会更早。