在WiX中注册COM服务器

4
我一直在尝试确定使用WiX创建Windows Installer软件包来注册COM服务器的最佳解决方案,但是遇到了困难。
在这篇文章中Deployment Engineering Archive: HOWTO: Use Regsvr32.exe with WIX,有一个关于“设置警察”打击通过自定义操作的exe使用regsvr32的开放请求。我知道使用regsvr32的弊端是它会向系统注册而不是用户,但我也记得OleSelfRegister可能会存在问题,这是来自Microsoft支持公告的建议(抱歉,找不到链接)- 我认为他们推荐使用regsvr32
有什么建议吗?
5个回答

4

请阅读“不要使用SelfReg和TypeLib表”:

https://msdn.microsoft.com/zh-cn/library/bb204770#no_selfreg

对于WiX,请查看模式参考中的Component元素:

http://wixtoolset.org/documentation/manual/v3/xsd/wix/component.html

注意某些子元素,如AppIdClassProgIdRegistry等。正确的技术是使用COM提取反射注册信息,并将其声明式地发出到您的安装程序中,以便MSI可以为您处理它,而无需转到某些可能失败并且不能提供MSI组件修复和广告视角的代码(例如DllRegisterServer())。


3

Wix中包含一个名为"Tallow"的工具。您可以使用它自动生成正确的注册表项。然后,您只需配置wix安装程序以编写这些条目即可。不应使用Selfreg。


1
参考:tallow不再是wix的一部分。自wix3之后,它已被heat.exe取代。 - Wim Coenen
2
热度不会为ActiveX exe服务器生成任何注册表值,因此这个答案是错误的。 - trampster
@trampster,你认为perlyking的回答是一个好的替代方案吗? - Wolf

1
正如@Trampster所指出的那样,heat.exe在从COM服务器中收集注册表条目方面表现不佳。我尝试过,但结果不完整。
相反,遵循Monitor Registry Accesses (InstallSite Tools: Monitoring)的建议,我使用了InstallShield RegSpyUI。据说这个工具随Installshield v7及以上版本一起提供,包括评估版。这些信息可能已经过时;我可以确认它没有与VS2013一起附带的几乎无用的Installshield LE一起提供。
幸运的是,我有一份InstallShield 2010的副本,它确实带有RegSpyUI。
无论如何,使用RegSpyUI非常容易:将其指向COM .exe,将注册表信息提取到.reg文件中。然后使用heat将其收集到.wxs文件中,以便将其添加到您的Wix项目中。 heat reg <some.reg> -gg -o <some.wxs> 然后只需修改任何硬编码路径,使其指向COM .exe的位置,以便反映所需的安装文件夹即可。
例如,如果由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"


0

这只有一个缺点:WiX Com registration 与 heat.exe 在 .exe COM 服务器上无法正常工作。InstallShield 及其工具似乎支持它,但 RegSpyUI 只是一个 UI 工具,不能在我的构建机器上运行。


0

请尝试以下步骤:

  1. 创建一个新的.NET项目
  2. 添加候选COM dll或OOP exe的项目引用,以收集其wxs
  3. 搜索文件Interop.candidate.dll(在obj\debug文件夹中)
  4. 对刚刚找到的interop dll运行WiX Heat工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接