4

我一直在尝试确定使用 WiX 注册 COM 服务器以创建 Windows Installer 包的最佳案例解决方案,但我正在苦苦挣扎。

在这篇部署工程存档:HOWTO:将 Regsvr32.exe 与 WIX 一起使用的帖子中,有一个公开请求,要求“设置警察”通过 exe 自定义操作来打击使用 regsvr32。regsvr32我知道使用它向系统注册而不是向用户注册的弊端,但我还记得OleSelfRegister可能有来自微软支持公告的问题(抱歉,找不到链接) - 我相信他们建议使用regsvr32.

有什么建议吗?

4

5 回答 5

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

注意某些子元素,例如AppIdClassProgIdRegistry等。正确的技术是用于COM extraction反映注册信息并将其以声明方式发送到您的安装程序中,以便 MSI 可以为您处理它,而不会退出进程到某些DllRegisterServer()可能失败的代码(如 ),也不会提供 MSI 对足迹的洞察力从维修和广告的角度来看该组件。

于 2008-10-02T13:42:58.143 回答
3

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

于 2008-11-05T14:07:17.487 回答
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 文件中。然后使用热量将其收集到一个 .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"

于 2014-10-10T16:39:57.730 回答
0

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

于 2018-11-28T17:16:13.677 回答
0

试试这个:

  1. 创建一个新的 .NET 项目
  2. 将项目引用添加到要收集其 wxs 的候选 COM dll 或 OOP exe
  3. 搜索文件Interop.candidate.dll(在obj\debug文件夹中)
  4. 在您刚刚找到的互操作 dll 上运行 WiX Heat 工具。
于 2019-03-01T15:12:24.333 回答