2011-09-21 37 views
0

我正在部署包含多个C++ COM的MSI。我们正在适应它在Windows 7/Server 2008上工作,出于某种原因,自注册COM不再有效。因此,我将它们全部更改为COMRelativePath。无法使用Visual Studio部署获得某些COM注册

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

警告:无法创建名为“ComponentThatWontRegister.dll”

做完了广泛的研究文件的注册信息,并想尽一切工作围绕,我无法克服这一点。我已经尝试设置RegCap.exe和devenv以各种兼容模式运行并提升为管理员级别。我试过Visual Studio 2010,同样的问题。

奇怪的是,大部分COM注册都很好,它们都是以相同的方式设置的;这只是少数有这个问题。我已经逐项浏览了COMs,并且找不到任何会使一个失败而另一个成功的事情。另外,在我使用regsvr32注册com的同一系统上,只要我以管理员身份运行命令提示符,它就可以工作。

+0

尝试从命令提示符(以管理员身份)运行msi并让我知道发生了什么。在Windows 7中存在与UAC冲突的MSI问题,这可能会导致您的问题。 – KreepN

+0

不确定你在这里是什么意思;问题在于,由于显示的错误,COM注册信息在MSI生成之后甚至不在MSI中。或者你是否要在将它切换到COMSelfReg之后执行此操作? – jpwkeeper

+0

将其切换到COMSelfReg之后。 – KreepN

回答

0

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

+0

不是。这个安装程序已经使用相同的组件已经有好几年了。当这些Windows 7和Server 2008机器停止允许自我注册时,这只会成为一个问题,如果我有重复的程序ID(不是立即但功能上),也会导致问题。 – jpwkeeper

0

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

比较无法成功的组件的链接器选项。