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:如何在安装过程中将程序与文件扩展名关联?的主要内容,如果未能解决你的问题,请参考以下文章

仅在 CPack 中将文件添加到 ARCHIVE 包

如何使用 CPACK_INSTALL_COMMANDS?

CPack WIX 在安装树之外安装一个文件

如何使用补丁文件修改 CPack 生成的 WiX XML?

如何使用 .desktop 文件(在 linux 下)将文件扩展名与应用程序相关联?

如何更改使用 CPack 安装的可执行文件的名称?