我的项目的主 CMakeLists.txt 包含生成 NSIS 安装程序的说明。
这些说明之一是
set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
nsExec::Exec '\\\"\\\$INSTDIR\\\\etc\\\\configure.cmd\\\" \\\"$INSTDIR\\\"'
nsExec::Exec '\\\"\\\$INSTDIR\\\\etc\\\\win32_postinst.cmd\\\" \\\"$INSTDIR\\\"'
Delete '\\\"\\\$INSTDIR\\\\etc\\\\configure.cmd\\\"'
Delete '\\\"\\\$INSTDIR\\\\etc\\\\win32_postinst.cmd\\\"'
")
目标是根据Windows CMD文件根据安装目录完成一些设置。安装完成后不再需要这些文件,应将其删除。
在生成的
.nsi
文件中,这些命令出现在 Section "-Core installation"
: 的末尾
nsExec::Exec '"$INSTDIR\etc\configure.cmd" "$INSTDIR"'
nsExec::Exec '"$INSTDIR\etc\win32_postinst.cmd" "$INSTDIR"'
Delete '"$INSTDIR\etc\configure.cmd"'
Delete '"$INSTDIR\etc\win32_postinst.cmd"'
执行两个
nsExec::Exec
命令,但不执行两个 Delete
命令。事实上,安装完成后,configure.cmd
和win32_postinst.cmd
这两个文件仍然存在。
这是为什么?删除这两个文件的正确步骤是什么?
您对删除说明的引用过多。
执行某些操作(并将完整命令行作为单个参数)的指令需要像
'"app" param1 "par am 2" param'
那样加引号,但只采用单个路径的命令只需要一对引号; Delete "$InstDir\somefile.txt"
。
NSIS 编译器会去掉最外层的引号,因此
Delete "$InstDir\somefile.txt"
会变成 Delete $InstDir\somefile.txt
,这就是您想要的(如果没有空格,则首先不需要引号)。