COM 组件的 windows 安装程序

Posted

技术标签:

【中文标题】COM 组件的 windows 安装程序【英文标题】:windows installer for COM component 【发布时间】:2011-04-03 20:28:18 【问题描述】:

我有一个需要为其制作安装程序的 C++ activex 控件。它需要删除 dll 并制作一些注册表项。

我有大约 6 个 .RGS 文件,我通过 regsvr32 进行自我注册,这些文件有效。

要进行安装程序,我手动将 RGS 脚本移植到 Visual Studio 2008 Windows 安装程序注册表 GUI。我觉得不可能做一个确切的端口(例如像 ForceRemove 这样的 RGS 关键字)。

难道没有办法从 IDL 文件生成这些文件吗?我做错了吗?

【问题讨论】:

【参考方案1】:

SelfReg 不是 MSI 安装中的最佳实践,因为它处于进程外且脆弱。 Visual Studio 2008 安装程序受到限制,但您应该能够将 Register 属性设置为 vsdrfCOM 而不是 vsdrfCOMSelfReg。这将导致从您的 DLL 中获取 COM 元数据并在 MSI 中本地创作。

构建 MSI 后,您应该注意到 SelfReg 表是空的,并且注册表表中有大量为您的 COM 数据自动创作的行。

注意:VDPROJ 在提取此 COM 时有点笨拙,因此它可能无法正常工作。您可能必须考虑使用更强大的工具,例如 InstallShield 或 Windows Installer XML。

【讨论】:

好的,是的,vsdrfCOM 是“无法提取注册信息”之类的。我去看看 WIX。有没有理由手动输入注册码? 是的。 COM 提取可能是一个令人毛骨悚然的过程,有时它会失败。在这些情况下,我对 VM 进行快照/配置文件/差异分析以找出它遗漏的内容,然后手动将这些条目写入安装程序以进行补偿。【参考方案2】:

你做错了。 .rgs 文件在那里,以便组件可以自行安装。任何安装程序都支持让组件自行安装。以 Visual Studio 安装项目为例,设置 Register 属性。

【讨论】:

好吧,我看到了,但 MSDN 似乎不建议这样做:msdn.microsoft.com/en-us/library/…msdn.microsoft.com/en-us/library/aa371608(v=VS.85).aspx 我误读了这些吗? 好的。在这种情况下,我的回答是“不”。 +1。看起来 .rgs 文件只能由 ATL 函数解析,它们的唯一目的是包含在库资源中以供以后使用 DllRegisterServer()

以上是关于COM 组件的 windows 安装程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 Windows 安装程序的情况下安装 vc++ 可再发行组件

Visual StudioVisual Studio 2019 创建 Windows 控制台程序 ( 安装 ‘使用 C++ 的桌面开发‘ 组件 | 创建并运行 Windows 控制台程序 )

Windows 受限用户安装

如何安装Windows服务

windows 10 服务组件安装出现0x80070422错误解决方法

Windows Installer 4.5未出现在先决条件组件列表中