使用WiX注册COM服务器
-
03-07-2019 - |
题
我一直在尝试确定使用WiX注册COM服务器以创建Windows Installer程序包的最佳案例解决方案,并且我正在努力。
在这篇文章中部署工程档案:HOWTO:使用Regsvr32.exe和WIX ,有一个打开请求<!>“安装警察<!>”;通过exe自定义操作来打击使用regsvr32。我知道使用regsvr32
的错误,因为它注册到系统而不是用户,但我还记得OleSelfRegister
可能有微软支持公告的问题(对不起,找不到链接) - 我相信他们建议使用<=>。
有什么建议吗?
解决方案
读取<!>“;不要使用SelfReg和TypeLib表<!>”;于:
https://msdn.microsoft.com/en-us/library / bb204770#no_selfreg
对于WiX,请查看架构参考中的 Component 元素:
http://wixtoolset.org/documentation/manual/v3 /xsd/wix/component.html
注意某些子元素,例如 AppId , Class , ProgId , Registry 等。正确的技术是使用COM extraction
反映注册信息并以声明方式将其发送到您的安装程序中,以便MSI可以为您处理它,而无需处理可能失败的某些代码(如DllRegisterServer()
),也不会从维修和广告角度提供MSI对组件占地面积的深入了解。
其他提示
有一个工具<!>“Tallow <!>”;包含在Wix中。您可以使用它自动生成正确的注册表项。然后,您只需配置您的wix安装来编写这些条目。不应使用Selfreg。
正如@Trampster指出的那样,heat.exe在从COM服务器中收集注册表项方面做得不好。我试过但结果不完整。
相反,请遵循 Monitor Registry Accesses(InstallSite工具:监控) ,我使用了InstallShield RegSpyUI。据推测,这版本包含Installshield v7及更高版本,包括评估版本。此信息可能已过期;我可以确认它是不提供VS2013附带的非常无用的Installshield LE。
幸运的是,我确实拥有了InstallShield 2010的副本,这确实与RegSpyUI一起提供。
无论如何,使用RegSpyUI是一件轻而易举的事:将它指向COM .exe,将注册表信息解压缩到.reg文件。然后使用heat将其收集到您可以添加到Wix项目的.wxs文件中
heat reg <some.reg> -gg -o <some.wxs>
然后,只需修改指向COM .exe位置的任何硬编码路径,以便它们反映预期的安装文件夹。
e.g。如果RegSpyUI + heat创建的.wxs文件有这样的东西
<Fragment>
<DirectoryRef Id="TARGETDIR">
<Component Id="blah" Guid="{xxxxxxxxxxxxxxxxxxxxxxxxx}" KeyPath="yes">
<RegistryKey Key="TypeLib\{xxxxxxxxxxxxxxxxxxxxxx}\4.1\0\win32" Root="HKCR">
<RegistryValue Value="C:\Users\you\projects\MyProject\dependencies\installation\COMFOO.exe" Type="string" />
</RegistryKey>
</Component>
</DirectoryRef>
</Fragment>
您正在主wix文件中安装
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="COMPANY" Name="My Company">
<!--This is the actual installation folder-->
<Directory Name="MyProduct" Id="MYPRODUCT">
然后只需将RegistryValue @ value路径编辑为... <!>“; [MYPRODUCT]\COMFOO.exe
<!>”;
这只有一个缺点:使用heat.exe注册WiX Com对.exe COM服务器不起作用。 InstallShield及其工具似乎支持它,但RegSpyUI只是一个UI工具,而不是我可以在我的构建机器上运行的工具。
试试这个:
- 创建新的.NET项目
- 将项目引用添加到要收集其wx的候选COM dll或OOP exe
- 搜索文件
Interop.candidate.dll
(在obj\debug
文件夹中) - 在您刚找到的互操作dll上运行WiX Heat工具。 醇>