我正在使用CPack和NSIS创建一个Windows安装程序。在安装过程中,应询问用户是否要将我的程序与文件扩展名关联。至少如果你在带有扩展名窗口的文件上“打开...”,应告诉你可以用我的程序打开它。有人知道怎么做吗?
答案 0 :(得分:1)
转到系统上的nsis安装文件夹,查看examples目录中的makensis.nsi。它将.nsi与makensisw.exe相关联。 祝你好运;)
答案 1 :(得分:0)
要使用NSIS创建文件关联,我建议使用Andrei T提到的NSIS插件:File Association和FileAssoc。要将它们集成到CPack中,您需要包含脚本,在安装步骤中调用宏,在卸载步骤期间调用其他宏。 例如,这就是我使用“文件关联”插件的方式:
# Including
set(CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS
"!include \\\"${path_to_plugins}\\\\fileassoc.nsh\\\"")
# Create association
set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS
"\\\${RegisterExtension} '$INSTDIR\\\\myprogram.exe' '.myext' 'my_program_key'")
# my_program_key can be any string that gives some hint what this file type is about. And should not contain strings
# Remove association
set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS
"\\\${UnRegisterExtension} '.myext' 'my_program_key'")
在此实现中,它不是可选步骤。
请注意双重逃脱。这是必需的,因为CPack使用这些字符串创建中间文件,如果只转义一次会出现语法错误。
另请注意,所有CMake路径都应使用反斜杠。我将它们转换为:
get_filename_component(path_to_plugins"${path_to_plugins}" ABSOLUTE)
file(TO_NATIVE_PATH "${path_to_plugins}" path_to_plugins)
string(REPLACE "\\" "\\\\" path_to_plugins"${path_to_plugins}")