我正在使用Visual 2015安装项目。
我在安装程序中有一个COM DLL,它引用了STDOLE (系统类型库,{00020430-0000-0000-C000-000000000046},据我理解,因为它是受保护的文件/注册)。如果您尝试注册它,您将在安装MSI时遇到一个错误(警告)。
然而,vdproj扩展将此DLL的注册添加到"TypeLib“MSI表中。它似乎并不总是这样做,但在某些情况下,我无法推断。我没有办法排除tlb,它在某种程度上一直在重复出现(可能是从依赖项吗?)
对于这个特定的项目,我只能使用,不能切换到更合理、更透明的替代方案(如WiX)。任何帮助或建议都是非常感谢的!
发布于 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,然后您可以:
regspy.exe richtx32.ocx >> richtx32.reg然后,可以将reg文件导入到Visual安装程序项目中。记住用MSI目录属性替换硬编码路径,并删除上面提到的错误VB6条目。
在Visual中,Right click Visual Studio Installer Project => View => Registry => Right Click Top Node => Import...
https://stackoverflow.com/questions/55346620
复制相似问题