我为我的Delphi应用程序准备的安装程序项目曾经正常工作,因为它在目标计算机上正确复制并注册了COM服务器DLL。这是使用Installshield 2015 Express构建的。
运行安装程序的计算机或我在其上创建安装程序的计算机的 Windows 10 的最新更新似乎已破坏 COM 注册过程。
现在,当我构建时,它给了我一系列警告消息:
ISEXP:警告-4354:生成无法提取COM信息 从文件 C:\InstallShield 2018 Projects\Current\Server Libraries\COMServer.dll in component COMServer.dll.请确保 文件正在自行注册,并验证是否自行注册 进程不会失败。
运行安装程序后,通过检查注册表,我可以看到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 上,我收到报告的错误,但在 Windows7或Windows 10 版本 1607计算机上,没有发生错误。它适用于InstallShield 2015,2018和2019,包括Express和Professional版本。
显然,Flexera需要共同采取行动,假设旧版本的程序(例如IsCmdBld.exe
(在更高版本的Windows 10更严格的安全要求下可以正常工作。