10

我正在尝试使用 WiX 注册一个 DLL。现在我知道并理解我应该使用heat并获取它来为我提取注册表信息,但是 heat 似乎失败并显示以下错误消息:heat.exe : warning HEAT5150 : Could not harvest data from a file that was expected to be a SelfReg DLL: C:\Users\seb\Desktop\Development\addin.dll. If this file does not support SelfReg you can ignore this warning. Otherwise, this error detail may be helpful to diagnose the failure: Unable to load file: C:\Users\seb\Desktop\Development\addin.dll, error: 193

我环顾四周,发现这篇文章更详细地解释了有关注册 DLL的信息,但如果可能的话,我想避免使用自我注册路线。我还看到在下面进一步提到手动注册 DLL,但我不太熟悉注册表或 COM 对象,我什至不知道我什至可以从哪里获得 CLSID、ProgId 以及已提到的任何其他信息。

如果有人能指出我正确的方向或向我解释我需要做什么来通过heat它运行 DLL,将不胜感激。

4

3 回答 3

14

我知道这很旧,但我想在这里添加一个答案 - 发生这种情况的原因是因为您尝试注册的 dll 是 64 位 dll - 而 Heat.exe 是 32 位,因此它无法在其地址空间中加载 dll。无论如何,只需指向 dll 的 32 位版本来创建 wxs 文件,您应该不会收到该错误。

于 2014-12-18T19:34:18.970 回答
1

这是一个非托管/本机 DLL 吗?Dependency Walker 是否显示任何缺失的依赖项?通常这意味着 DllRegisterFunction 失败并且 Heat 无法提取任何数据。解决这个问题,您应该会获得良好的 XML 元数据。

于 2012-09-17T19:34:27.767 回答
0

我在使用 Wix heat.exe 时遇到了同样的问题:警告 HEAT5150:无法从预期为 SelfReg DLL 的文件中收集数据。原因是 dll 无法找到要加载的依赖项。我想你一定有类似的问题。我运行 Process Monitor 工具并应用过滤器来捕获 heat.exe 事件。我能够找到问题的根本原因。基本上我必须将所有依赖 dll 放在我的主 dll 所在的同一位置。对于您的情况,addin.dll 需要指向您的依赖 dll 所在的相同位置。

以下关于此警告的博客帮助我找出了根本原因。

http://marc.durdin.net/2009/12/case-of-hidden-exception.html

于 2012-09-18T21:14:54.170 回答