NSIS 安装包默认支持的参数
NSIS 制作的安装包默认支持 /NCRC、/S、/D= 三个参数,详见下文 3.2 Installer Usage(来自 Command Line Usage)。
以上三个参数对应的功能分别为禁止 CRC 校验、静默安装、设置安装路径,这三个功能不需要自己在 NSI 脚本里开发就默认支持。
3.2 Installer Usage
Generated installers and uninstallers accept a few options on the command line. These options give the user a bit more control over the installation process.
3.2.1 Common Options
- /NCRC disables the CRC check, unless CRCCheck
force
was used in the script. - /S runs the installer or uninstaller silently. See section 4.12 for more information.
- /D sets the default installation directory ($INSTDIR), overriding InstallDir and InstallDirRegKey. It must be the last parameter used in the command line and must not contain any quotes, even if the path contains spaces. Only absolute paths are supported.
3.2.2 Uninstaller Specific Options
- _?= sets $INSTDIR. It also stops the uninstaller from copying itself to the temporary directory and running from there. It can be used along with ExecWait to wait for the uninstaller to finish. It must be the last parameter used in the command line and must not contain any quotes, even if the path contains spaces.
3.2.3 Examples
installer.exe /NCRC
installer.exe /S
installer.exe /D=C:\Program Files\NSIS
installer.exe /NCRC /S /D=C:\Program Files\NSIS
uninstaller.exe /S _?=C:\Program Files\NSIS
# uninstall old version
ExecWait '"$INSTDIR\uninstaller.exe" /S _?=$INSTDIR'
关于静默安装参数 /S
只要指定了 /S 参数(S 必须大写),NSIS 脚本中 IfSilent 函数就会自动返回 true,这是 NSIS 内置支持的,不需要自己在 NSIS 脚本中写代码来解析。
来自官方文档中 IfSilent 的函数说明:
(Checks the silent flag, and jumps to jump_if_silent if the installer is silent, otherwise jumps to jump_if_not. The silent flag can be set by SilentInstall, SilentUninstall, SetSilent and by the user passing /S on the command line.)
关于选盘参数 /D=
XXXSetup.exe /D=C:\Program Files (x86)
如上,给安装包指定这个参数后,会自动赋值给 $INSTDIR 变量。并且如果在安装包内调用 ${GetParameters} $R0 来获取安装包参数时,将获取不到 /D= 参数,被 NSIS 自己吃掉了,不会传给 NSI 脚本。
如果想自己处理 /D= 参数,比如加一些自己的逻辑,必须换个参数,比如改为 /d=(即 D 改为小写的 d)。
另外,注意:
1. 这个参数指定的路径不能包含引号,即使路径中含有空格。
2. 该参数支持创建多级文件夹。
上面说的 /D= 参数被 NSIS 自己吃掉的问题,参考帖子:
windows - NSIS weird behavior with GetParameters - Stack Overflow