1

问题的背景

我目前正在尝试整合一种分发我正在处理的新项目的方法,该项目需要在用户系统上注册一个 COM 公开的 .NET DLL,因为我是 WiX 的新手并正在迁移到它为此,我试图让事情尽可能简单。

问题

我的 DLL 注册的最大问题是 regasm 将 InProcServer32 键的默认值设置为“mscoree.dll”,但我的 DLL 似乎只能在使用它的完整路径时被实例化,例如“C:\Windows\ SysWow64\mscoree.dll"

目前我在我的安装项目中有一个自定义操作(我想放弃使用 WiX),它将调用 SearchPath API 来查找 mscoree.dll 的完整路径并用完整路径覆盖默认值,以便 DLL 可以实例化没有任何问题。

建议的解决方案/问题

由于我是 WiX 的新手,所以我有准备一个 .reg 文件的想法,该文件将包含进入 CLSID 树的所有必要信息,然后让 WiX 以某种方式执行该文件。

我的问题是:

  1. 以这种方式注册 DLL 是否存在任何固有缺陷?
  2. 由于我试图在这里找到解决方法的主要原因是 mscoree.dll 问题,在 WiX 中是否有任何本地方法可以做到这一点?
4

1 回答 1

1

看看名为“Heat”的 WiX 程序。这可以“收获”您的 DLL,包括与 RegAsm / COMVisible 部分相关的注册表信息。然后,您可以剪切此代码并将其放入您的 wxs 文件中。

您还可以使用 Regasm /regfile,然后将该信息手动转换为 RegistryValue 元素。

关于您的路径问题,请使用SystemFolder 属性

[SystemFolder]mscoree.dll

如果您将安装标记为 32 位 (x86),这将在 64 位操作系统上运行时自动解析为 SysWow64 文件夹,在 32 位操作系统上运行时自动解析为 System32 文件夹。

于 2012-05-23T02:02:40.987 回答