c++ - FireBreath 和 ICE38

标签 c++ wix firebreath

我已经开始获取 ICE38(组件安装到用户配置文件。它必须使用 HKCU 下的注册表项作为其 KeyPath,而不是文件。)构建我的 firebreath 插件时出错。 这是导致它的文件:

<w:Fragment>
    <w:DirectoryRef Id="INSTALLDIR" />
</w:Fragment>
<w:Fragment>
    <w:ComponentGroup Id="PluginDLLGroup">
        <w:Component Id="cmp53DB29233E32657DBB1B18A8A6AC46CF" Guid="{28E01B1F-714F-1111-B021-111111837CAA}" Directory="INSTALLDIR">
            <w:File Id="fil5103252FF582E67B8ED35C6633BD4B7B" Source="$(var.BINSRC)\npiPlugin.dll" />
        </w:Component>
    </w:ComponentGroup>
</w:Fragment>

问题是当我构建以前的代码版本时,这个文件看起来不同。它有许多 TypeLib、App、Class、Interface 和 RegistryValue 条目。
我比较了 FireBreath 为工作和不工作提交生成的构建环境,它们看起来相同(除了为 VS 内容生成的 GUID)。但是在我构建解决方案之后,它们会生成不同的 npiPlugin_auto.wixobj 和 npiPlugin_auto.wxs 文件。在损坏的提交中没有对 cmake 或 wix 文件进行任何更改,因此似乎唯一可能导致此问题的是源代码。
那么,此类行为是否可能是由源代码更改引起的,我该如何跟踪这些更改?

最佳答案

此文件表明 heat 无法从插件中获取任何注册数据。通常发生这种情况是因为需要 DLL 来加载插件,并且在构建安装程序时不可用。

您可以在 POST_BUILD 命令中将所需的 DLL 复制到输出目录以修复此问题。

add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy "${DLLFILE_PATH}" "${FB_BIN_DIR}/${PLUGIN_NAME}/${CMAKE_CFG_INTDIR}/"
)

这是一个未经测试的例子; DLLFILE_PATH 需要设置为所需 DLL 文件的路径。这将确保在构建安装程序之前将其复制到某个位置。

关于c++ - FireBreath 和 ICE38,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28027514/

相关文章:

com - Heat.exe 无法从 64 位 COM DLL 获取 TypeLib 信息

c++ - 怎么样! (模板<std::size_t 大小>)

可以为 NULL 的 C++ 字符串

c++ - 管道无法读取/写入所有字符

c++ - unique_ptr 编译器错误,因为将代码从 VS2013 预览导入到 VS2012

c++ - Firebreath 不会使用 Xcode 5.0.2 进行编译

c++ - 需要帮助将 uint8_t 数组转换为 NSMutableData

c++ - string s怎么改成char * a[]?

wix - 无法在MSI中运行Wix自定义操作

c++ - 我可以通过 WiX 的自定义操作访问 .wxl 本地化文件中的字符串吗?