4.12 静默安装、卸载
静默安装在安装过程中不需要用户参与而且不显示用户界面。用户不会看到任何对话且不会被询问任何问题。这对于网络管理员希望不需要用户参与的安装或卸载一些程序,这样可以快速的对多台电脑执行操作。对于其他的开发者来说,把其他的安装程序整合到自己的安装程序并且把所有需要的信息收集到自己的安装程序而不是显示两个安装程序时非常有用的。
NSIS 安装程序和卸载程序都可以静默或非静默。当一个安装程序或卸载程序静默时,不是所有的回调函数都被调用。.onGUIInit 和 .onGUIEnd 它们对应的卸载程序函数和任何涉及到特殊页面或页面类型的回调将不会被调用。
有几种方法来使得安装或卸载程序静默:
- SilentInstall 和 SilentUninstall
- SetSilent
- 在程序命令行里加 /S 参数(区分大小写)
要判断安装、卸载程序是否静默请使用 IfSilent。
首先你需要确认你的安装程序是否真的需要静默模式,在每一个需要用户参与的命令或创建一个窗口命令之前你应该使用 IfSilent 来判断。MessageBox 命令是在静默安装程序最常犯的,应该使用 /SD 开关来为静默安装程序指定一个默认的回答。如果你希望你的安装程序可以完全的静默你就应该使用这个开关。使所有内部的 NSIS 信息对话框都有一个静默安装的默认值。silent.nsi 实例演示了这个主题的所有方面问题。
因为安装目录选择页面在静默安装的时候不会显示,所以用户可以添加一个命令行选项来指定安装程序安装目录 (也可以在非静默安装、卸载程序里使用)。用户只需要使用 /D 开关,像下面这样的例子:
foo.exe /S /D=C:\Program Files\Foo
如果你的安装程序在静默模式时需要更多的信息,你可以让你的用户在命令行里指定并在 .onInit 函数里进行处理,比如:
Function .onInit Call GetParameters Pop $2 # 查找引号 /USERNAME StrCpy $1 '"' Push $2 Push '"/USERNAME=' Call StrStr Pop $0 StrCpy $0 $0 "" 1 # skip quote StrCmp $0 "" "" next # 查找非引号 /USERNAME StrCpy $1 ' ' Push $2 Push '/USERNAME=' Call StrStr Pop $0 next: StrCmp $0 "" done # 复制 /USERNAME= 后面的值 StrCpy $0 $0 "" 10 # 查找下一个参数 Push $0 Push $1 Call StrStr Pop $1 StrCmp $1 "" done StrLen $1 $1 StrCpy $0 $0 -$1 done: FunctionEnd
上面的例子将会把 /USERNAME= 后面的值复制到 $0。这样可以让用户在命令行指定必须的参数信息而不需要用户参与的用户界面。用户可以使用:
foo.exe /S /USERNAME=Bar /D=C:\Program Files\Foo
或:
foo.exe /S "/USERNAME=字串" /D=C:\Program Files\Foo