使用WiX注册COM服务器

时间:2008-10-02 13:09:42

标签: installation wix windows-installer install

我一直在尝试确定使用WiX注册COM服务器以创建Windows Installer程序包的最佳案例解决方案,并且我正在努力。

在这篇文章Deployment Engineering Archive: HOWTO: Use Regsvr32.exe with WIX中,有一个打开请求“安装警察”通过exe自定义操作来打击使用regsvr32。我知道使用regsvr32注册到系统而不是用户的罪恶,但我还记得OleSelfRegister可能有微软支持公告的问题(抱歉,找不到链接) - 我相信他们建议使用regsvr32

有什么建议吗?

5 个答案:

答案 0 :(得分:4)

在以下位置阅读“不要使用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对组件足迹的洞察力。

答案 1 :(得分:3)

Wix附带了一个“Tallow”工具​​。您可以使用它自动生成正确的注册表项。然后,您只需配置您的wix安装来编写这些条目。不应使用Selfreg。

答案 2 :(得分: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将其收集到您可以添加到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

答案 3 :(得分:0)

这仅有一个缺点:使用heat.exe注册WiX Com不适用于.exe COM服务器。 InstallShield及其工具似乎支持它,但是RegSpyUI只是一种UI工具,不是我可以在构建机器上运行的工具。

答案 4 :(得分:0)

尝试一下:

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