Sil*_*ent 5 installer windows-installer wix dllregistration winforms
我有一个.NET winform应用程序,需要在安装过程中注册本机DLL.我的问题是如何在MSI安装过程中注册一个DLL(regsvr32 ABC.dll)?类似如何取消注册dll作为卸载过程的一部分?
Ste*_*mul 12
注册COM文件的正确方法是从文件中提取COM注册表信息,并添加到MSI中相应的COM表系列.大多数MSI工具都具有支持此COM提取的功能,有关详细信息,请参阅答案末尾的单独部分.
此MSI SDK文章列出了下面描述的自注册一般问题的几种变体,并描述了一些进一步的细节 - 特别是关于COM数据的每用户注册和源代码源方案.
提取的COM数据将确保COM服务器的可靠安装,并支持高级MSI功能,如" 广告 "," 回滚 ",弹性和" 提升权限 ".您可以在本摘要中阅读有关这些高级MSI优势的更多信息,这些优点在serverfault.com上已经有些受欢迎:MSI的企业优势.
也可以使用Windows安装程序中的内置SelfReg表来使用regsvr32.exe作为安装过程的一部分注册文件(甚至作为自定义操作调用),但由于多种原因,这被认为是不好的做法:
提取COM数据和进入MSI表是一个相当复杂的任务,市场上的大多数工具,如Installshield,Advanced Installer和明智的 (不幸的是,Wise现已离市)有自动解决方案.
在Installshield中,您只需启用一个名为" 在构建时提取COM数据 "的组件标志,并且明智的在组件级别上有一个类似的标志.WiX可以使用名为heat.exe的工具提取COM注册表数据,并且生成的WiX代码可以插入到您的源WiX文件中(现在可能还有新的功能,我不知道).我不知道Visual Studio中会自动提取COM数据的任何功能,但看起来Chris Painter在他的回答中提供了一种可能性.
如果Heat不适合您,请查看RegSpy2(Phil Wilson - "Windows安装程序权威指南"的作者写了RegSpy,有人将其扩展到RegSpy2).还要检查一下:使用WiX注册ActiveX exe服务器(我的回答是针对regspy.exe命令行使用的底部).
插入到MSI中的错误COM数据 - 特别是对于企业环境中的重新打包应用程序 - 是" 意外的周期性自我修复 "的主要原因之一.请参阅这篇长篇文章以解释此问题:如何确定导致重复Windows Installer自修复的原因?(第3节"一些典型的自修复问题场景"一节中描述了这个问题).
其他几种安装工具具有类似的提取功能:使用什么安装产品?InstallShield,WiX,Wise,Advanced Installer等
vsdrfCOMSelfReg 不是最佳实践。请尝试使用 vsdrfCOM。这将从 DLL 中“提取”(或尝试,vdproj 有时是 POS)COM 元数据并将其编写到正确的 COM 表中。这比希望在安装时对 DllRegisterServer 的进程外调用有效要好。
现在 MSI 本身就知道您的 COM 资源,它将为您处理安装和卸载。
| 归档时间: |
|
| 查看次数: |
7568 次 |
| 最近记录: |