2011-09-21 38 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進行編譯時使用的。

比較無法成功的組件的鏈接器選項。