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

Visual studio 2015 VisualStudio安装项目(vdproj)-STDOLE,如何正确注册COM DLL?,visual-studio-2015,windows-installer,vdproj,Visual Studio 2015,Windows Installer,Vdproj,我正在使用Visual Studio 2015安装项目 我在安装程序中有一个COM DLL,它引用了STDOLE(系统类型库{00020430-0000-0000-C000-0000000000 46},据我所知,该库不能注册,因为它是受保护的文件/注册)。如果您尝试注册它,安装MSI时会出现错误(警告) 不过,vdproj扩展将此DLL的注册添加到“TypeLib”MSI表中。虽然它似乎并不总是这样,但在某些情况下我无法推断。我没有选择排除tlb,它不知何故一直在重新出现(可能是从依赖项中出现

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

我在安装程序中有一个COM DLL,它引用了STDOLE(系统类型库{00020430-0000-0000-C000-0000000000 46},据我所知,该库不能注册,因为它是受保护的文件/注册)。如果您尝试注册它,安装MSI时会出现错误(警告)

不过,vdproj扩展将此DLL的注册添加到“TypeLib”MSI表中。虽然它似乎并不总是这样,但在某些情况下我无法推断。我没有选择排除tlb,它不知何故一直在重新出现(可能是从依赖项中出现?)

  • 为什么vdproj尝试注册不应该注册的DLL
  • 如何避免这种情况?我尝试用脚本添加对生成的MSI的手动后期编辑,以删除tlb,这很有效;然而,这似乎是一个完全邪恶的方法来解决这个问题
  • 对于这个特定的项目,我一直使用VisualStudio安装程序,无法切换到更合理、更透明的替代方案(如WiX)。非常感谢您的任何帮助或建议

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

    (多用途工具,其中之一是COM注册提取):“…注册COM时 在VB6中创建的组件它添加作为 VB6运行时组件。建议VB6组件使用此标志 避免在卸载时中断VB6运行时。以下值为 排除在外:
    CLSID\{D5DE8D20-5BB8-11D1-A1E3-00A0C90F2731}
    Typelib\{EA544A21-C82D-11D1-A3E4-00A0C90AEA82}
    Typelib\{000204EF-0000-0000-C000-0000000000 46}
    ,引用这两个类型库的任何接口“

    分辨率:现在最难的部分是,实际的解决方案是什么?坦白地说,我现在没有时间测试,但我想你可以用Orca打开最终的MSI并删除这些条目——如果它们在那里的话。我想这正是你现在正在做的,所以你回到了原点,但至少有一点是清楚的,是什么导致了这个问题
    我想您可以尝试在VB6组件未注册时运行生成,而不是在注册时运行生成?
    这会有某种意义,即只有在生成时组件未注册时,它才会提取密钥
    如果是这种情况,可能在安装构建之前尝试自注册VB6组件


    RegSpy.exe:您可以使用名为(或RegSpy2)的工具从COM文件中提取COM注册。您可以在“Release”文件夹中找到exe,然后转到:

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

    VSProj:在Visual Studio中,
    右键单击Visual Studio安装程序项目
    查看
    注册表
    右键单击顶部节点
    导入…
    VB6运行时:注册表项:
    Visual Basic 6运行时的一部分
    ,WiX中的一个已知问题是,
    heat.exe
    错误地提取COM数据会为每个ActiveX或COM组件带来此注册表项。请注意,这不是WiX的错误,而是VB6的一般问题。因此您在VisualStudio安装程序项目中也看到了这个问题

    (多用途工具,其中之一是COM注册提取):“…注册COM时 在VB6中创建的组件它添加作为 VB6运行时组件。建议VB6组件使用此标志 避免在卸载时中断VB6运行时。以下值为 排除在外:
    CLSID\{D5DE8D20-5BB8-11D1-A1E3-00A0C90F2731}
    Typelib\{EA544A21-C82D-11D1-A3E4-00A0C90AEA82}
    Typelib\{000204EF-0000-0000-C000-0000000000 46}
    ,引用这两个类型库的任何接口“

    分辨率:现在最困难的部分是,实际的解决方案是什么?坦率地说,我现在没有时间测试,但我想你可以用Orca打开最终的MSI并删除这些条目-它们应该在那里。我想这正是你现在正在做的,所以你回到了原点,但至少有一点单簧管我想你可以试着在VB6组件未注册时运行生成,而不是在注册时运行生成?
    这在某种意义上说,如果在生成时组件未注册,它只提取密钥?
    如果是这种情况,也许可以试着自注册你的VB6组件在安装生成之前输入


    RegSpy.exe:您可以使用名为(实际上是RegSpy2)的工具从COM文件中提取COM注册。您可以在“Release”文件夹中找到exe,然后执行以下操作:

    regspy.exe richtx32.ocx >> richtx32.reg
    
    然后,您可以将reg文件导入到Visual Studio安装程序项目中。还记得吗