首页 > 解决方案 > 未由 Installshield 2015/2018 Express 注册的 COM 服务器库

问题描述

我的 Delphi 应用程序的安装程序项目曾经正常工作,因为它在目标计算机上正确复制并注册了 COM 服务器 DLL。这是使用Installshield 2015 Express构建的。

对于运行安装程序的机器,或者可能是我创建安装程序的机器,最近对 Windows 10 的更新似乎已经破坏了 COM 注册过程。

现在,当我构建时,它给了我一系列警告消息:

ISEXP:警告 -4354:构建无法从组件 COMServer.dll 中的文件 C:\InstallShield 2018 Projects\Current\Server Libraries\COMServer.dll 中提取 COM 信息。请确保文件是自注册的,并验证自注册过程没有失败。

运行安装程序后,通过检查注册表,我可以看到 COM 服务器 DLL 没有注册,因为它们的 CLSID 信息丢失。如果我打开提升的命令提示符并使用regsvr32注册 DLL ,那么它们就可以了。

我已经尝试过建议的“修复”,例如更改 IsCmdBld.exe 的兼容性、以管理员身份运行 IS、打开 UAC(我从未关闭它)。

我看到的一条评论说我们需要在安装后运行自定义操作才能运行regsvr32,但我认为这是安装程序中 COM 注册步骤的重点。

我还将项目升级到Installshield 2018 R2 Express,但问题完全相同。

即使作为授权注册用户,Flexera似乎也无法为我提供任何支持,只是将我指向社区论坛。在这种情况下,我更喜欢 SO 社区。

标签: cominstallshielddllregistration

解决方案


事实证明,是安装了InstallShield的Windows版本导致了该问题。即使是最新的InstallShield 2019 Professional也存在与 COM 库相同的问题。

在我的Windows 10 版本 1903上,我收到报告的错误,但在Windows 7Windows 10 版本 1607机器上,没有发生错误。它适用于InstallShield 201520182019,包括ExpressProfessional版本。

显然,Flexera 需要采取行动,假设旧版本的程序IsCmdBld.exe例如.


推荐阅读