簡體   English   中英

Visual Studio 安裝項目 (vdproj) - STDOLE,如何正確注冊 COM DLL?

[英]Visual Studio Setup Project (vdproj) - STDOLE, how to properly register COM DLL?

我正在使用 Visual Studio 2015 安裝項目。

我在設置中有一個 COM DLL,它引用了 STDOLE(系統類型庫,{00020430-0000-0000-C000-000000000046},據我所知,不能注冊,因為它是受保護的文件/注冊)。 如果您嘗試注冊它,您將在安裝 MSI 時遇到錯誤(警告)。

盡管如此,vdproj 擴展會將此 DLL 的注冊添加到“TypeLib”MSI 表中。 似乎它並不總是這樣做,但在某些情況下我無法推斷。 我沒有選擇排除那個 tlb,它以某種方式不斷重新出現(可能來自依賴關系?)

  1. 為什么 vdproj 會嘗試注冊不應注冊的 DLL?
  2. 如何避免這種情況? 我嘗試使用腳本添加生成的 MSI 的手動后期編輯以刪除該 tlb,並且有效; 然而,這似乎是解決問題的一種完全邪惡的方法。

對於這個特定的項目,我堅持使用 Visual Studio 安裝程序,無法切換到更合理和透明的替代方案(例如 WiX)。 非常感謝任何幫助或建議!

VB6 運行時:注冊表項: Typelib\\{000204EF-0000-0000-C000-000000000046}Visual Basic 6 Runtime ,這是 WiX 中的一個已知問題,即heat.exe提取 COM 數據時錯誤地帶來了此注冊表項對於每個 ActiveX 或 COM 組件。 請注意,這不是 WiX 的錯,而是 VB6 的一般問題 因此,您在 Visual Studio 安裝程序項目中也看到了這個問題。

來自 WiX 幫助手冊(對於 heat.exe) (多用途工具,其中之一是 COM 注冊提取):“ ...當注冊在 VB6 中創建的 COM 組件時,它會添加作為 VB6 運行時組件一部分的注冊表項. 建議將此標志用於 VB6 組件,以避免在卸載時破壞 VB6 運行時。排除以下值: CLSID\\{D5DE8D20-5BB8-11D1-A1E3-00A0C90F2731} , Typelib\\{EA544A21-C82D-11D1-A3E4-00A0C90AEA82} , Typelib\\{000204EF-0000-0000-C000-000000000046} ,任何引用這兩個類型庫的接口Typelib\\{000204EF-0000-0000-C000-000000000046} "

解決方案:現在是困難的部分,實際的修復是什么? 坦率地說,我現在沒有時間進行測試,但我想您可以使用 Orca 打開最終的 MSI 並刪除這些條目 - 如果它們在那里。 我想這正是您現在正在做的事情,所以您又回到了原點,但至少對於導致問題的原因有一點清晰。 I suppose you can try to run the build when the VB6 component is unregistered as opposed to when it is registered? 如果組件在構建時未注冊,它只會提取密鑰,這在某種意義上是有意義的嗎? If this is the case, maybe try to self-register your VB6 component prior to the setup build


RegSpy.exe :您可以使用名為RegSpy (或實際上是 RegSpy2)的工具從 COM 文件中提取 COM 注冊。 你可以在“Release”文件夾中找到exe,然后你去:

regspy.exe richtx32.ocx >> richtx32.reg

然后,您可以將 reg 文件導入到您的 Visual Studio 安裝程序項目中。 請記住用 MSI 目錄屬性替換硬編碼路徑並刪除上面提到的錯誤 VB6 條目。

VSProj :在 Visual Studio 中, Right click Visual Studio Installer Project => View => Registry => Right Click Top Node => Import...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM