com - 未由 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 社区。
解决方案
事实证明,是安装了InstallShield的Windows版本导致了该问题。即使是最新的InstallShield 2019 Professional也存在与 COM 库相同的问题。
在我的Windows 10 版本 1903上,我收到报告的错误,但在Windows 7或Windows 10 版本 1607机器上,没有发生错误。它适用于InstallShield 2015、2018和2019,包括Express和Professional版本。
显然,Flexera 需要采取行动,假设旧版本的程序IsCmdBld.exe
(例如.
推荐阅读
- c++ - 在cin之前打印“cout”?
- python - df.join() 的问题:ValueError: You are trying to merge on object and int64 columns
- python - pandas.groupby().plot() 堆叠每组的行数,而不是实际值
- firebase - Google Cloud Functions - 许多功能中使用的自定义库
- r - 用ggplot中的分隔符包装轴文本
- php - 在php中添加日期和时间之间的html跨度
- swift - Alamofire 请求发送两次
- javascript - 如何在不渲染的情况下获得 svg 元素的填充颜色?
- excel - 如何打开用 Dir 找到的文件?
- javascript - 如何让 hbs 从回调函数中渲染数组?