cpack:如何在安装过程中将程序与文件扩展名相关联?

时间:2012-04-17 09:19:53

标签: nsis cpack

我正在使用CPack和NSIS创建一个Windows安装程序。在安装过程中,应询问用户是否要将我的程序与文件扩展名关联。至少如果你在带有扩展名窗口的文件上“打开...”,应告诉你可以用我的程序打开它。有人知道怎么做吗?

2 个答案:

答案 0 :(得分:1)

转到系统上的nsis安装文件夹,查看examples目录中的makensis.nsi。它将.nsi与makensisw.exe相关联。 祝你好运;)

答案 1 :(得分:0)

要使用NSIS创建文件关联,我建议使用Andrei T提到的NSIS插件:File AssociationFileAssoc。要将它们集成到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}")