Visual Studio安装项目(vdproj) - STDOLE,如何正确注册COM DLL?

问题描述 投票:1回答:1

我正在使用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 Installer,并且无法切换到更合理和透明的替代方案(例如WiX)。任何帮助或建议都非常感谢!

visual-studio-2015 windows-installer vdproj
1个回答
1
投票

VB6运行时:注册表项:Typelib\{000204EF-0000-0000-C000-000000000046}Visual Basic 6 Runtime的一部分,它是WiX中的一个已知问题,heat.exe提取COM数据错误地为每个ActiveX或COM组件带来了这个注册表项。请注意,这不是WiX的错,而是VB6的一般问题。因此,您在Visual Studio安装程序项目中也会遇到问题。

From the WiX help manual (for 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},引用这两个类型库的任何接口。“

解决方案:现在困难的部分是什么,实际的解决方案是什么?坦率地说,我现在没有时间进行测试,但我想你可以用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 Installer项目。请记住用MSI目录属性替换硬编码路径,并删除上面提到的错误VB6条目。

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

© www.soinside.com 2019 - 2024. All rights reserved.