FireBreath 和 ICE38
FireBreath and ICE38
我在构建我的 firebreath 插件时开始遇到 ICE38(组件安装到用户配置文件。它必须使用 HKCU 下的注册表项作为其 KeyPath,而不是文件。)错误。
这是导致它的文件:
<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 文件的路径。这将确保在构建安装程序之前将其复制到相应位置。
我在构建我的 firebreath 插件时开始遇到 ICE38(组件安装到用户配置文件。它必须使用 HKCU 下的注册表项作为其 KeyPath,而不是文件。)错误。 这是导致它的文件:
<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 文件的路径。这将确保在构建安装程序之前将其复制到相应位置。