【问题标题】:Heat.exe: 64-bit .dll fails to be converted to a 64-bit .msiHeat.exe:64 位 .dll 无法转换为 64 位 .msi
【发布时间】:2014-12-16 14:20:41
【问题描述】:

我尝试使用 heat.exe 生成 64 位 FireBreath MSI 安装程序,但得到以下输出:

heat.exe : warning HEAT1108 : The command line switch 't:' is deprecated. 
Please use 't' instead.
heat.exe : warning HEAT5150 : Could not harvest data from a file that was 
expected to be  a SelfReg DLL: 
C:\Users\firebreath-master\buildPlugin\bin\Release\myPlugin64.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\firebreath- master\buildPlugin\bin\Release\myPlugin64.dll, error: 193

为了生成 64 位 .msi,我复制了从 32 位 .dll 生成的 MyPlugin_auto.wxs,并使用之前复制的 64 位 .dll 和 MyPlugin_auto.wxs 再次构建。 64 位 msi 生成时没有错误,我安装了它,对其进行了测试,它工作正常,但我想问一下它是否是克服 heat.exe 错误的更好方法。

【问题讨论】:

  • 这不是错误。错误 193 是“错误的可执行文件格式”。鉴于这是一个 64 位 DLL,您需要使用 64 位版本的 Heat.exe。不这样做不可避免地会导致这个错误,混合位数是不可能的。
  • 有没有可以下载 heat.exe 64 位的链接?
  • 在网上搜索发现this
  • 事实证明 heat.exe 仍然不能正确处理 64 位 COM 二进制文件(2017 年 12 月)。有关一些上下文、解释和一些建议的解决方案,请参阅此答案:stackoverflow.com/a/47755780/129130

标签: windows wix windows-installer firebreath wix3.6


【解决方案1】:

Heat 告诉您它看到一个 Dll 暴露了 DllRegisterServer() 函数,并且它未能收集任何 COM 信息。这通常意味着 DLL 缺少依赖项,并且 DllRegisterServer() 在收集期间无法正确运行。

我会使用 Depends 查看 DLL 并查找缺少的依赖项。将这些 DLL 放入目录中,然后再次尝试收割。

【讨论】:

  • 我找到了this 讨论,所以我只是想确保我所做的解决方法是有效的。
  • 运行depends.exe并得到:警告:未找到至少一个延迟加载依赖模块。警告:由于延迟加载依赖模块中缺少导出功能,至少有一个模块存在未解析的导入。
  • 好像缺少以下DLL:API-MS-WIN-APPMODEL-RUNTIME-L1-1-0.DLL API-MS-WIN-CORE-WINRT-ERROR-L1-1-0 .DLL API-MS-WIN-CORE-WINRT-L1-1-0.DLL API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL API-MS-WIN-CORE-WINRT-STRING- L1-1-0.DLL API-MS-WIN-SHCORE-SCALING-L1-1-0.DLL DCOMP.DLL IESHIMS.DLL MFPLAT.DLL
  • 这可能是导致 heat.exe 警告和错误的原因吗?
  • 看到这是一个开源项目,也许你可以把DLL贴在某个地方让我玩?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 2019-10-09
  • 2010-10-31
  • 2012-02-14
  • 1970-01-01
  • 2014-06-21
  • 2014-09-11
相关资源
最近更新 更多