当前位置:  开发笔记 > 开发工具 > 正文

使用WiX生成和安装Typelib

如何解决《使用WiX生成和安装Typelib》经验,为你挑选了2个好方法。

在询问Visual Studio注册COM库后做了什么,很明显VS为COM注册做了两件事:

    注册了COM库

    创建并注册类型库

Visual Studio似乎使用regasm.exe进行此注册.对于第一部分(直接COM注册)使用tallowheat(WiX 2.0或WiX 3.0)似乎可以获得所有基本的COM注册信息.

但是,动物/热似乎没有设置类型库安装.可以使用WiX安装程序和regasm.exe创建自定义操作来执行此操作,但是当涉及基于Microsoft安装程序的安装程序时,调用自定义操作不是最佳做法.

经过进一步研究,看起来msi能够在安装时生成类型库.事实上,WiX似乎直接支持它!在文件元素中,您可以添加Typelib元素.实际上,wix上的这篇文章有一个用Interface元素填充TypeLib元素的例子.

似乎Interface元素至少有两个必需的属性:

    ID

    名称

Larry Osterman谈到了通常需要为TypeLib注册的接口的其他部分,这个接口条目似乎照顾了各个部分.Larry说我们需要将ProxyStubClassId32指定为"{00020424-0000-0000-C000-000000000046}",因此我们可以轻松添加它.

从那里去哪里以及为各种界面元素填写的内容让我感到难过.我已经继续将TypeLib元素添加到我的wix文件中,并且它已成功编译.关于如何设置Interface元素,我有点无能为力.我们需要做些什么来正确填写TypeLib元素,以及我可以使用哪些应用程序或工具来获取它?

wcoenen下面的答案看起来很有希望......我打算试一试.

更新:在下面发布我的最终解决方案作为答案.



1> Robert P..:

这是懒人解决这个问题的方法:使用heatWiX 3.0.

如果你有一个自动生成的类型库并通过regasm安装,heat可以将.tlb作为参数

heat file c:\my\path\to\my.tlb -out tlb.wxs

它将生成您需要注册的所有typelib和interface元素.这不能解决需要提前知道它们的问题,并且它不能解决当程序集版本发生变化时GUID更改的问题(即使接口没有 - 这是你唯一的时间'应该改变它但它会让你在那里中途.


+1我不知道你可以用heat.exe收集tlb文件

2> Wim Coenen..:

以下技巧可以帮助您收集任何注册表更改并将其转换为wxs文件,包括您之后的typelib元素.

    首先,将注册表恢复到未注册类型库的状态:

    c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe /tlb /u mylib.dll
    

    将注册表的这个干净状态导出到hklm-before.reg:

    c:\WINDOWS\system32\reg.exe export HKLM hklm-before.reg
    

    再次注册类型库:

    c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe /tlb mylib.dll
    

    将注册表的新状态导出到hklm-after.reg:

    c:\WINDOWS\system32\reg.exe export HKLM hklm-after.reg
    

    现在我们有两个文本文件,hklm-before.reg和hklm-after.reg.创建一个diff.reg文件,该文件仅保存这些文件之间的相关差异.您可以使用差异工具轻松找到差异.我喜欢使用TortoiseSVN中包含的diff工具,因为我每天都使用它.(由于文本编码问题,WinDiff在这种情况下似乎不能很好地工作.)

    现在,我们可以通过调用转换diff.reg成.wxs heat.exereg命令.(需要wix 3.5或更新.)

    heat reg diff.reg -out typelib.wxs
    


哎哟.难怪他们说WiX创作现在是一个手动过程,嗯!
推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有