【问题标题】:Heat.exe Cannot Harvest TypeLib Info from a 64-bit COM DLLHeat.exe 无法从 64 位 COM DLL 获取 TypeLib 信息
【发布时间】:2014-05-19 17:40:04
【问题描述】:

我有一个 64 位的 COM DLL,我想使用 heat.exe 从中获取 typelib 信息。但是当我尝试这样做时,我收到错误 193(错误的可执行格式)。 heat.exe 是否只有 32 位,不能与 64 位可执行文件一起使用?我在我的机器上只发现了一个 heat.exe 版本。

谢谢。

【问题讨论】:

标签: com wix win64


【解决方案1】:

不幸的是,heat.exe 确实是 32 位的,因此只能获取 32 位 COM 注册:http://wixtoolset.org/issues/1661/

但是,这里讨论了 64 位 heat.exe 扩展:http://sourceforge.net/p/wix/mailman/message/30541133/,代码可以在这里找到:https://wix.codeplex.com/SourceControl/network/forks/roberthyang/NewHeatExtension/latest

【讨论】:

    【解决方案2】:

    根据您要执行的操作,可能会有解决方案,如果您只需要添加 Win64 属性,您可以通过candle.exe 执行此操作,请参阅here

    否则您可能还发现了一个未解析的已知bug

    【讨论】:

    • 我试图从该模块获取 COM 注册信息。幸运的是,正如我自己编写的那样,我只是将 GUID 和其他内容粘贴到另一个模块的热生成注册 sn-p 中。
    【解决方案3】:

    在尝试获取 vb6 和非 .net 库时,我遇到了类似的问题。你可以试试加热吗 -scom -o

    如果这不能解决问题,您可以在此处粘贴您的加热命令吗?

    【讨论】:

      【解决方案4】:

      就我而言,我需要一个用于 32 位和 64 位 COM DLL 的单独包。使用 32 位 DLL 的收获适用于 64 位版本。只需要确保构建配置是 64 位特定的。

      【讨论】:

        【解决方案5】:

        如果您可以让警告继续,并且您只有非常少量的文件作为 64 位 DLL,您可以尝试以下方法:

        • 照常运行 HEAT.EXE,创建输出文件;
        • 编辑文件,并将 SelfRegCost="0" 添加到您需要包含的每个文件元素中

        例子:

        <Directory Id="dir..." Name="MyDLL">
          <Component Id="cmp..." Guid="...">
            <File Id="fil..." KeyPath="yes" 
             Source="...\MyDLLFile.dll" 
             SelfRegCost="0" />
          </Component>
        </Directory>
        

        https://wixtoolset.org/documentation/manual/v3/xsd/wix/file.html

        我只需要在我的包中管理一个这样的 DLL,它就起作用了

        【讨论】:

        • 在原问题中添加了一些cmets,也许看看。
        猜你喜欢
        • 1970-01-01
        • 2012-05-28
        • 2013-03-22
        • 2012-05-22
        • 1970-01-01
        • 2012-05-18
        • 2013-03-24
        • 2010-09-16
        • 1970-01-01
        相关资源
        最近更新 更多