首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual安装项目(vdproj) - STDOLE,如何正确注册COM DLL?

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

Stack Overflow用户
提问于 2019-03-25 21:24:57
回答 1查看 849关注 0票数 1

我正在使用Visual 2015安装项目。

我在安装程序中有一个COM DLL,它引用了STDOLE (系统类型库,{00020430-0000-0000-C000-000000000046},据我理解,因为它是受保护的文件/注册)。如果您尝试注册它,您将在安装MSI时遇到一个错误(警告)。

然而,vdproj扩展将此DLL的注册添加到"TypeLib“MSI表中。它似乎并不总是这样做,但在某些情况下,我无法推断。我没有办法排除tlb,它在某种程度上一直在重复出现(可能是从依赖项吗?)

  1. 为什么vdproj尝试注册不应该注册的DLL?
  2. 如何避免这种情况?我尝试用脚本添加生成的MSI的手动后编辑,以删除tlb,但这似乎是解决问题的一种完全邪恶的方法。

对于这个特定的项目,我只能使用,不能切换到更合理、更透明的替代方案(如WiX)。任何帮助或建议都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2019-03-26 04:27:40

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

CLSID\{D5DE8D20-5BB8-11D1-A1E3-00A0C90F2731}__,(多用途工具,其中之一是COM注册提取):“注册在VB6中创建的COM组件的...When添加作为VB6运行时组件一部分的注册表项。建议VB6组件使用此标志,以避免在卸载时中断VB6运行时。不包括以下值:引用这两种类型库的接口:

Resolution:现在最难的是,实际的解决方法是什么?坦率地说,我现在没有时间进行测试,但我想您可以使用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注册。您可以在“释放”文件夹中找到exe,然后您可以:

代码语言:javascript
复制
regspy.exe richtx32.ocx >> richtx32.reg

然后,可以将reg文件导入到Visual安装程序项目中。记住用MSI目录属性替换硬编码路径,并删除上面提到的错误VB6条目。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55346620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档