我使用firebreath 1.7开发了浏览器插件。Am使用VS 2010(32位)4.5版我为开发的64位插件运行prep2010x64。脚本文件成功运行。当我构建解决方案时,我从.wxs文件中发现了以下错误。
文件代码:
错误消息:
错误LGHT0204:ICE38:组件cmpF18BE09DE30566DAAE419571E599F99A安装到用户配置文件。它必须使用HKCU下的注册表项作为其KeyPath,而不是文件。
插件项目运行时没有错误,我可以在winform应用程序中使用本机方法从dll访问方法。
但未能在浏览器中注册插件。
检查文件元素的Keypath属性是否设置为yes。
例如:
<DirectoryRef Id="APPLICATIONROOTDIRECTORY">
<Component Id="myapplication.exe" Guid="PUT-GUID-HERE">
<File Id="myapplication.exe" Source="MySourceFilesMyApplication.exe" KeyPath="yes"/>
</Component>
<Component Id="documentation.html" Guid="PUT-GUID-HERE">
<File Id="documentation.html" Source="MySourceFilesdocumentation.html" KeyPath="yes"/>
</Component>
</DirectoryRef>
如果不是问题所在,请将您的代码添加到问题中。
FireBreath的wix代码依赖于heat,而heat不适用于64位DLL。
您可以使用32位构建为其制作自己的.wxs模板,然后使用类似于以下内容的模板:
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
# On 64 bit heat.exe doesn't seem to work!
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Win/WiX/pluginObject.wxs" "${CMAKE_CURRENT_BINARY_DIR}/pluginObject${WIX_HEAT_SUFFIX}.wxs")
message("Configuring ${CMAKE_CURRENT_SOURCE_DIR}/Win/WiX/pluginObject.wxs to ${CMAKE_CURRENT_BINARY_DIR}/pluginObject${WIX_HEAT_SUFFIX}.wxs")
set(WIX_HEAT_OVERRIDE "${CMAKE_CURRENT_BINARY_DIR}/pluginObject${WIX_HEAT_SUFFIX}.wxs")
set(WIX_IS_WIN64 yes)
SET(WIX_PLATFORM x64)
SET(ProgramFilesFolder ProgramFilesFolder64)
ELSE()
set(WIX_IS_WIN64 no)
SET(WIX_PLATFORM x86)
SET(ProgramFilesFolder ProgramFilesFolder)
endif()
add_wix_installer( "${PLUGIN_NAME}"
"${WIX_SOURCE_FILE}"
PluginDLLGroup
"${FB_BIN_DIR}/${PLUGIN_NAME}/${CMAKE_CFG_INTDIR}/"
"${FB_BIN_DIR}/${PLUGIN_NAME}/${CMAKE_CFG_INTDIR}/${FBSTRING_PluginFileName}.dll"
"${PROJECT_NAME}"
)
需要注意的主要内容是WIX_HEAT_OVERRIDE,它告诉使用哪个.wxs文件而不是运行HEAT。老实说,我不记得其他东西是用来做什么的,但可以自己检查代码并弄清楚:-P这应该会帮助你开始。