cpack:如何在安装过程中将程序与文件扩展名关联?
Posted
技术标签:
【中文标题】cpack:如何在安装过程中将程序与文件扩展名关联?【英文标题】:cpack: how to associate program with file extension during install? 【发布时间】:2012-04-17 09:19:53 【问题描述】:我正在使用 CPack 和 NSIS 创建一个 Windows 安装程序。在安装过程中,应该询问用户是否要将我的程序与文件扩展名相关联。至少如果您对带有扩展名的文件执行“打开方式...”,则应告知您可以使用我的程序打开它。有人知道怎么做吗?
【问题讨论】:
【参考方案1】:转到您系统上的 nsis 安装文件夹并查看示例目录中的 makensis.nsi。它将 .nsi 与 makensisw.exe 相关联。 祝你好运;)
【讨论】:
还要检查nsis.sourceforge.net/File_Association和nsis.sourceforge.net/FileAssoc 那我只需要告诉 cpack 使用我的 .nsi 文件吗?【参考方案2】:要使用 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")
【讨论】:
以上是关于cpack:如何在安装过程中将程序与文件扩展名关联?的主要内容,如果未能解决你的问题,请参考以下文章