【问题标题】:Publish .Net library in COM using Wix Installer使用 Wix 安装程序在 COM 中发布 .Net 库
【发布时间】:2013-11-04 18:09:19
【问题描述】:

我正在尝试使用 WiX 安装程序在 COM 上注册一个库,但它似乎忽略了我。

到目前为止我尝试过的是:

  1. 使用heat.exe获取所有对应.dll的信息。

  2. 创建了一个片段,其中包含我从 heat.exe 收集的所有信息。 我将所有收集到的信息复制到一个组件中,以使事情变得更容易。

  3. 我使用ComponentRef 调用组件,该ComponentRef 指向包含要注册的dll 相关信息的组件。

  4. 我使用自定义操作将其注册到 COM:

<CustomAction Id="RegisterComLibrary" Directory="ComPublishDllFolder" ExeCommand="regsvr32.exe /s [ComPublishDllFolder]MyLibrary.dll />

  1. InstallExecuteSequence 中插入CustomAction

    <InstallExecuteSequence> <Custom Action="RegisterComLibrary" After="InstallFinalize">NOT Installed</Custom> </InstallExecuteSequence>

但是,当我尝试使用 oleview 在 COM 中查找 .dll 或尝试在 Visual Studio 中使用它时,我看不到它。

我做错了什么?

注意:我在尝试手动注册时收到以下消息:

The module "MyComObject.dll" was loaded but the call to DllRegisterServer failed.

Ensure that "MyComObject.dll" is a valid DLL or OCX and try again.

【问题讨论】:

  • 热量产生了什么?另外,调用regsvr32 不是Windows Installer 的方式——它旨在通过Registry 表管理注册表项。

标签: wix libraries wix3.5 wix3.6


【解决方案1】:

对不起,这完全是我的错。对在 COM 中发布的 .Net dll 如何工作的误解。

当我在 COM 中发布我的 .Net 编译 dll 并尝试在 .Net 项目中使用它时,它会发出一条消息,说我不能使用在 .Net 中编译的 COM 库,因为它是一个 .Net 库.

起初我认为这是一个错误,但实际上,如果我尝试在 C++ 项目中使用该库(例如),它可以正常工作。

问题在于 Visual Studio 不允许使用以与您构建项目相同的语言发布的 COM 库,显然...

【讨论】:

  • COM 库不必位于导出 DllRegisterServer 的 DLL 中。使用 .NET 创建的通常不是。
  • 如果要在 .NET 项目中使用 .NET 程序集,请将引用添加为 .NET 程序集引用,而不是 COM 引用。
猜你喜欢
  • 2011-12-10
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多