无法使用Visual Studio Deployment获得某些com注册

Cannot get certain COMs to register using Visual Studio Deployment

本文关键字:com 注册 Deployment Visual Studio      更新时间:2023-10-16

我正在部署一个包含几个c++ com的MSI。我们正在调整它以在Windows 7/Server 2008上工作,由于某些原因,自注册com不再工作。因此,我将它们全部更改为COMRelativePath。

这似乎是有效的,但其中3个组件,神秘地,没有注册。在安装程序的构建过程中,对于那些没有注册的人,我看到了以下消息:

警告:无法为名为' componentthatwonregister .dll'的文件创建注册信息

在做了广泛的研究并尝试了所有的解决方法之后,我无法克服这个问题。我试过将RegCap.exe和devv设置为在各种兼容模式下运行,并将其提升到管理权限。我试过Visual Studio 2010,同样的问题。

奇怪的是,大多数COMs寄存器都很好,它们都以相同的方式设置;只有极少数人有这个问题。我一个项目一个项目地看了COMs,我找不到任何会导致一个失败而另一个成功的东西。此外,在同一系统上,如果我使用regsvr32注册com,只要我以管理员身份运行命令提示符,它就可以工作。

这表明如果msi中的两个或多个组件具有相同的progid,则可能发生错误。这是原因吗?

如果这些是ATL控件,有些可能会链接到ATL. dll,有些则不会。根据部署目标和构建机器的不同,当针对较旧的平台SDK进行编译时,您可能会得到一个支持UAC的atl1 . dll,而使用UAC的静态注册表则不支持UAC。

比较失败组件和成功组件的链接器选项