3

如何使 Nullsoft Scriptable Install System (NSIS) 安装程序静默?

来自维基百科:

“Nullsoft Scriptable Install System (NSIS), est un logiciel libre contrôlable par script, qui permet la création d'installateurs pour Windows. Il a été initialement développé par Nullsoft, la société créatrice de Winamp. NSIS est une alternative aux produits commerciaux, comme安装盾牌。

NSIS 编译器程序 makensis 将类似以下示例的脚本编译成可执行的安装程序。脚本中的每一行都包含一个命令。”

# Example script

Name "Example1"
OutFile "example1.exe"
InstallDir "$PROGRAMFILES\Example1"
Page Directory
Page InstFiles
Section
  SetOutPath $INSTDIR
  File ..\makensis.exe
SectionEnd  
4

1 回答 1

14

命令行使用

一、MakeNSIS使用

编译 NSIS (.nsi) 脚本以生成安装程序

makensis [option | script.nsi | - [...]]

例子

makensis.exe myscript.nsi

2.安装程序使用

一些选项

  • /S 静默运行安装程序或卸载程序
  • /D 设置默认安装目录 ($INSTDIR),覆盖 InstallDir 和 InstallerDirRegKey。它必须是命令行中使用的最后一个参数,并且不能包含任何引号,即使路径包含空格也是如此。仅支持绝对路径。

例子

installer.exe /S

installer.exe /S /D=C:\Program Files\NSIS

静默安装程序/卸载程序

  • 要检查安装程序是否静默,请使用IfSilent

  • 要在静默模式下跳过一些指令(用户交互、创建窗口),请使用跳转指令

例子

IfSilent +2 0 
    MessageBox MB_OK|MB_ICONINFORMATION 'This is a "non silent" installer'

在此示例中,如果安装程序处于静默状态,则会显示消息框。+2表示如果 IfSilent 为真,则跳过 nex 指令。0表示如果 IfSilent 为假,帽子编译器应该转到下一条指令。

  • 要将安装程序设置为静默模式(暂时),请使用SetSilentin.onInit方法。选项适用silent于静音模式和normal非静音模式。

  • 设置安装程序 | 卸载程序静默,您也可以使用

    SilentInstall silent

    SilentUnInstall silent

  • 在静默模式下,安装程序本身的所有屏幕都不会显示。但是,可能会显示消息框和所有其他未标记为 SF_SELECTED 的屏幕。要使安装程序完全静默,请使用指令跳转(通常)或标记 /SD IDOK | IDCANCEL(用于 OK|CANCEL 消息框)。

    MessageBox MB_OK|MB_ICONINFORMATION "This is not a silent installer" /SD IDOK

此处,如果静音模式打开,则不会显示消息框,其行为与用户 OK 相同。注意那里的选项顺序

MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "Application is running. Please close it first." /SD IDCANCEL  IDOK OK IDCANCEL CANCEL 
  • 如果应该在静默模式下从用户那里收集一些信息,可以使用 GetOptions 将更多选项传递给函数 .onInit,

像这儿:

!include FileFunc.nsh
!insertmacro GetParameters
!insertmacro GetOptions

Function .onInit
  ${GetParameters} $R0
  ClearErrors
  ${GetOptions} $R0 /USERNAME= $0
FunctionEnd

参考

NSIS 静默安装 1

NSIS 静默安装 2

NSIS 静默安装 3

于 2013-01-21T19:00:21.950 回答