我正在使用Visual Studio 2015安装项目。
我在设置中有一个COM DLL,它引用了STDOLE(系统类型库,{00020430-0000-0000-C000-000000000046},根据我的理解,它不能注册,因为它是受保护的文件/注册)。如果您尝试注册它,则在安装MSI时会出现错误(警告)。
然而,vdproj扩展将此DLL的注册添加到“TypeLib”MSI表。它似乎总是不会这样做,但在某些条件下我无法推断。我没有选择排除那个tlb,它以某种方式不断重现(从依赖关系可能?)
对于这个特定的项目,我坚持使用Visual Studio Installer,并且无法切换到更合理和透明的替代方案(例如WiX)。任何帮助或建议都非常感谢!
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...