1

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

4

2 回答 2

1

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

于 2012-06-21T07:59:23.767 回答
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}")
于 2018-06-01T07:27:38.580 回答