\C{scriptref} Scripting Reference

\H{fileformat} Script File Format

A NSIS Script File (.nsi) is just a text file with script code.

\\<b\\>Commands\\</b\\>

Commands lines are in the format 'command [parameters]'

\c File "myfile"

\\<b\\>Comments\\</b\\>

Lines beginning with ; or # are comments. You can put comments after commands. You can also use C-style comments to comment one or more lines.

\c ; Comment
\c # Comment
\c
\c # Comment \
\c     Another comment line (see `Long commands` section below)
\c
\c /*
\c Comment
\c Comment
\c */
\c
\c Name /* comment */ mysetup
\c
\c File "myfile" ; Comment

If you want a parameter to start with ; or # put it in quotes.

If the first or second line in the file is a \#{pep263}comment with the following format, the rest of the file is decoded using the specified character set.

\c # -*- coding: utf-8 -*-

\\<b\\>Plug-ins\\</b\\>

To call a plug-in, use 'plugin::command [parameters]'. For more info see \R{plugindlls}{Plug-in DLLs}.

\c nsExec::Exec "myfile"

\\<b\\>Numbers\\</b\\>

For parameters that are treated as numbers, use decimal (the number) or hexadecimal (with 0x prepended to it, i.e. 0x12345AB), or octal (numbers beginning with a 0 and no x).

Colors should be set in hexadecimal RGB format, like HTML but without the #.

\c IntCmp 1 0x1 lbl_equal
\c
\c SetCtlColors $HWND CCCCCC

\\<b\\>Strings\\</b\\>

To represent strings that have spaces, use quotes:

\c MessageBox MB_OK "Hi there!"

Quotes only have the property of containing a parameter if they surround the rest of the parameter. They can be either single quotes, double quotes, or the backward single quote.

You can escape quotes using $\\:

\c MessageBox MB_OK "I'll be happy" ; this one puts a ' inside a string
\c MessageBox MB_OK 'And he said to me "Hi there!"' ; this one puts a " inside a string
\c MessageBox MB_OK `And he said to me "I'll be happy!"` ; this one puts both ' and "s inside a string
\c MessageBox MB_OK "$\"A quote from a wise man$\" said the wise man" ; this one shows escaping of quotes

It is also possible to put newlines, tabs etc. in a string using $\\r, $\\n, $\\t etc. \R{varstrings}{More information...}

\\<b\\>Variables\\</b\\>

Variables start with $. User variables must be declared.

\c Var MYVAR
\c
\c StrCpy $MYVAR "myvalue"

\R{variables}{More information...}

\\<b\\>Long commands\\</b\\>

To extend a command over multiple lines, use a backslash (\\) at the end of the line. The next line will effectively be concatenated to the end of it. For example:

\c CreateShortcut "$SMPROGRAMS\NSIS\ZIP2EXE project workspace.lnk" \
\c     "$INSTDIR\source\zip2exe\zip2exe.dsw"
\c
\c MessageBox MB_YESNO|MB_ICONQUESTION \
\c     "Do you want to remove all files in the folder? \
\c     (If you have anything you created that you want \
\c      to keep, click No)" \
\c     IDNO NoRemoveLabel

Line extension for long commands works for comments as well. It can be a bit confusing, so it should be avoided.

\c # A comment \
\c     still a comment here...

\\<b\\>Compiler Commands\\</b\\>

Compiler commands start with a ! and are executed at compile time.

\c !define MESSAGE "Hello"
\c
\c !ifdef MESSAGE
\c   MessageBox MB_OK "${MESSAGE}"
\c !else
\c   !error "MESSAGE not defined, cannot continue!"
\c !endif

\R{comptime}{More information...}

\\<b\\>Configuration file\\</b\\>

If a file named "nsisconf.nsh" in the config directory exists, it will be included by default before any scripts (unless the /NOCONFIG command line parameter is used). The config directory on Windows is the same directory as makensis.exe is in. On other platforms this is set at install time and defaults to $PREFIX/etc/. You can alter this at runtime, see \k{usageenvironment} for more information.
