C++ 无法使用Visual Studio部署获取要注册的特定COM

C++ 无法使用Visual Studio部署获取要注册的特定COM,c++,visual-studio,com,installation,registration,C++,Visual Studio,Com,Installation,Registration,我正在部署一个包含几个C++ COM的MSI。我们正在对其进行调整,使其能够在Windows 7/Server 2008上运行,出于某种原因,自注册COM不再起作用。结果,我把它们都改成了Comepath 这似乎奏效了,但神秘的是,其中3个组件没有注册。在安装程序的构建过程中,对于未注册的用户,我看到以下消息: 警告:无法为名为“ComponentThatWontRegister.dll”的文件创建注册信息 我做了广泛的研究并尝试了所有的工作,但我无法克服这一点。我尝试将RegCap.exe和d

我正在部署一个包含几个C++ COM的MSI。我们正在对其进行调整,使其能够在Windows 7/Server 2008上运行,出于某种原因,自注册COM不再起作用。结果,我把它们都改成了Comepath

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

警告:无法为名为“ComponentThatWontRegister.dll”的文件创建注册信息

我做了广泛的研究并尝试了所有的工作,但我无法克服这一点。我尝试将RegCap.exe和devenv设置为在各种兼容模式下运行,并提升为管理权限。我试过VisualStudio2010,同样的问题


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

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

如果这些是ATL控件,有些可能与ATL.DLL链接,有些则不是。根据部署目标与构建机器的不同,在根据旧平台SDK编译时,您可能会得到一个支持UAC的ATL.DLL,而使用静态regsitrar的ATL.DLL则不支持


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

否。此安装程序已使用相同的组件工作多年。只有当这些Windows 7和Server 2008计算机停止允许自我注册时,这才成为一个问题,如果我有重复的程序ID(不是立即的,而是功能上的),这也会导致问题。请尝试从命令提示符(作为管理员)运行msi,并让我知道发生了什么。MSI问题与windows 7中的UAC冲突,这可能导致您的问题。不确定您在这里的意思;问题是,由于显示的错误,COM注册信息在构建后甚至不在MSI中。或者你是说在切换到COMSelfReg后再这样做?在切换到COMSelfReg后。