我们有一个使用 InstallShield 2009 编写的安装程序包,面向 Windows Installer 3.1。
最近,我们开始注意到,在某些基于 Windows 2003 R2 x86 的主机上安装时,安装失败,安装程序日志报告 1603 错误代码(顺便说一句,这并没有太大帮助,因为它意味着ERROR_INSTALL_FAILURE ,那是一个很笼统的“安装过程中发生了致命错误。 ”)。
由于安装仍在同一平台上的其他一些主机上运行,经过进一步调查,我们发现它发生在已经安装 Sql Server 2008 R2 的主机上,这使我们发现问题确实出在 Windows Installer 4.5 .
每当安装程序包安装 Windows Installer 4.5 时,我们的安装程序包都会失败并显示 1603。到目前为止,我们找到了一种解决方法:如果我们手动卸载 Windows Installer 4.5(运行类似“ C:\WINDOWS\$NtUninstallKB942288-v4 $\spuninst\spuninst.exe "),然后我们可以成功运行我们的安装程序包,但这有各种缺点:
- 卸载 Windows Installer 4.5 的用户会收到一个对话框,其中列出了使用该软件安装的所有各种软件产品,并且这些产品与 Windows Installer 4.5 之间的链接在卸载后有效地丢失了,即使我们在成功安装我们的应用程序后重新安装它;
- 由于 Microsoft 发布了各种版本的 Windows Installer 4.5,因此要卸载的实用程序的位置并非严格意义上的上述位置;
- 要求客户执行这样的工作是很尴尬的。
我想将安装程序包升级到目标 Windows Installer 5 可能会解决问题,但如果可能的话,我想避免它,并继续使用 InstallShield 2009 来创作这个特定的包。
我已经搜索了 Microsoft 和 Flexera 知识库(并且我正在继续我的调查),但到目前为止无济于事。
有谁知道 Microsoft 或 Flexera 或任何其他第三方是否已发布有关此问题的修补程序或更多信息?
关于 1603 错误代码失败的一些信息
我们从至少 3 台不同的服务器上获得了有关此问题的详细日志,并且我们对此进行了深入调查,但到目前为止还没有用。大多数操作返回 1,有些返回 0(特别是IsolateComponents、MigrateFeatureStates、IsolateComponents、SetODBCFolders、MigrateFeatureStates、UnpublishComponents、UnregisterComPlus、UnregisterTypeLibraries、UnregisterMIMEInfo、RemoveShortcuts、RemoveFiles、CreateShortcuts、RegisterMIMEInfo、InstallODBC、RegisterTypeLibraries、RegisterComPlus 和PublishComponents那些),安装程序包实际上似乎几乎可以安装(执行所有序列到“安装。返回值1。 ”,它甚至打印“产品:[我们的产品] - 安装操作成功完成。"),然后它才开始回滚所有内容,并且由于回滚时出现各种错误,我认为其中一些会导致 1603(可能是 MsiProvideAssembly 在 ISChainPackagesCleanup 上返回的一些 1607),但关键是它不应该回滚,而对于 Windows Installer 3.1(或 5.x)则不会,只有在 Windows 2003 x86 环境中安装了 Windows Installer 4.5 时才会回滚。