向WiX注册COM服务器
我一直在努力确定一个最好的解决方案,用WiX注册一个COM服务器来创建一个Windows安装程序包,我正在努力 在这篇文章中,有一个公开请求“设置警察”通过exe自定义操作来打击使用regsvr32的行为。我知道使用向WiX注册COM服务器,wix,windows-installer,installation,Wix,Windows Installer,Installation,我一直在努力确定一个最好的解决方案,用WiX注册一个COM服务器来创建一个Windows安装程序包,我正在努力 在这篇文章中,有一个公开请求“设置警察”通过exe自定义操作来打击使用regsvr32的行为。我知道使用regsvr32的坏处,因为它注册到系统而不是用户,但我还记得OleSelfRegister可能会在microsoft支持公告中出现问题(抱歉,找不到链接)-我相信他们建议使用regsvr32 有什么建议吗?请阅读“不要使用SelfReg和TypeLib表”,网址为: 对于WiX,
regsvr32
的坏处,因为它注册到系统而不是用户,但我还记得OleSelfRegister
可能会在microsoft支持公告中出现问题(抱歉,找不到链接)-我相信他们建议使用regsvr32
有什么建议吗?请阅读“不要使用SelfReg和TypeLib表”,网址为:
对于WiX,请查看模式参考中的Component元素:
注意某些子元素,如AppId、Class、ProgId、Registry等。正确的方法是使用
COM提取
来反映注册信息,并以声明方式将其发送到安装程序中,这样MSI就可以为您处理注册信息,而无需对某些代码进行处理(如DllRegisterServer()
)这可能会失败,也不能从维修和广告的角度让MSI深入了解组件的封装外形。Wix附带了一个工具“动物脂”。您可以使用它自动生成正确的注册表项。然后您只需配置wix安装来写入这些条目。Selfreg不应使用。正如@Trampster所指出的,heat.exe无法很好地从COM服务器获取注册表项。我试过了,但结果不完全
相反,根据上的建议,我使用了InstallShield RegSpyUI。这可能与Installshield v7及更高版本一起提供,包括评估版本。此信息可能已过期;我可以确认它不是VS2013附带的几乎毫无用处的Installshield LE
幸运的是,我确实有一份InstallShield 2010的副本,这是随RegSpyUI提供的
无论如何,使用RegSpyUI很容易:将它指向COM.exe,将注册表信息提取到.reg文件中。然后使用heat将其收集到一个.wxs文件中,您可以将其添加到Wix项目中
heat reg-gg-o
然后,只需修改指向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
“这只有一个缺点:WiX Com向heat.exe注册不适用于.exe Com服务器。InstallShield及其工具似乎支持它,但RegSpyUI只是一个UI工具,不是我可以在构建机器上运行的工具。尝试以下方法:
Interop.candidate.dll
(在obj\debug
文件夹中)参考:牛脂不再是wix的一部分。从wix3开始,它已被heat.exe替换。heat不会为ActiveX exe服务器生成任何注册表值,因此此答案是正确的wrong@trampster那么你认为这是一个好的选择吗?