我一直在试图确定注册使用WiX的创建一个Windows安装程序包COM服务器,并很努力最好的情况的解决方案。
在这篇文章中部署工程档案:HOWTO:使用Regsvr32.exe与维克斯 ,有一个“设置警察”,以打击通过一个exe自定义操作使用REGSVR32开放的要求。 我知道使用的罪恶regsvr32
为它注册到系统而不是用户,但我还记得, OleSelfRegister
可以从Microsoft支持公告的问题(对不起,找不到链接) -我相信他们建议使用regsvr32
。
有什么建议?
阅读“不要使用SelfReg和类型库表”上:
https://msdn.microsoft.com/en-us/library/bb204770#no_selfreg
对于WiX的,看看在架构参考组件元素:
http://wixtoolset.org/documentation/manual/v3/xsd/wix/component.html
采取一定的子元素如的AppId, 类 ,PROGID, 注册表等的通知。 正确的方法是使用COM extraction
反映的注册信息和声明发出到您的安装程序,从而MSI可以照顾它,你不走出去过程中的一些代码(如DllRegisterServer()
可能会失败,也没有提供MSI洞察组件从修复和广告的角度足迹。
有一个工具“牛油”包含维克斯。 你可以用它来自动生成正确的注册表项。 然后你只需配置维克斯安装写这些条目。 Selfreg不宜使用。
作为@Trampster指出,heat.exe不会从COM服务器做收获注册表项的一个好工作。 我试过,但结果是不完整的。
取而代之的是,在之后的建议监视注册表存取(InstallSite工具:监测) ,我用的InstallShield RegSpyUI。 这理应船舶使用InstallShield V7和超越版本,包括评估版本。 这些信息可能是过时的; 我可以证实,它不使用随VS2013漂亮,很多无用的Installshield LE提供。
幸运的是,我也有2010的InstallShield的副本,这并配备RegSpyUI。
无论如何,RegSpyUI是一件轻而易举的使用方法:在COM的.exe点它,提取登记信息到.reg文件。 然后使用热收获到.wxs文件,这个你可以添加到您的维克斯项目
heat reg <some.reg> -gg -o <some.wxs>
然后,它只是一个修改指向COM .exe文件的位置,以便它们反映了预期的安装文件夹的任何硬编码路径的问题。
例如,如果通过RegSpyUI创建.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>
和你在你的主威克斯文件安装到
<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 @值路径......“ [MYPRODUCT]\COMFOO.exe
”
There is just one drawback to this: WiX Com registration with heat.exe does not work for .exe COM servers. InstallShield and its tools seem to support it, but RegSpyUI is just a UI tool, not one which I can run on my build machine.