如何在 CPack 生成的 NSIS 安装程序的安装后阶段删除文件

问题描述 投票:0回答:1

我的项目的主 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
这两个文件仍然存在。

这是为什么?删除这两个文件的正确步骤是什么?

cmake nsis cpack
1个回答
0
投票

您对删除说明的引用过多。

执行某些操作(并将完整命令行作为单个参数)的指令需要像

'"app" param1 "par am 2" param'
那样加引号,但只采用单个路径的命令只需要一对引号;
Delete "$InstDir\somefile.txt"

NSIS 编译器会去掉最外层的引号,因此

Delete "$InstDir\somefile.txt"
会变成
Delete $InstDir\somefile.txt
,这就是您想要的(如果没有空格,则首先不需要引号)。

© www.soinside.com 2019 - 2024. All rights reserved.