Thursday 14 March 2013

Hello, world! in NSIS - the simplest NSIS script

NSIS requires two things to be present in a script:

1) call to OutFile function (in order to define installer's name and output directory)
2) at least one Section (NSIS script executes sections and each section can contain functions and instructions; functions contain instructions only)

So, the shortest script that compiles could be:

HelloWorld.nsi:




NSIS compiler creates HelloWorld-installer.exe in the same directory where HelloWorld.nsi resides. When run, installer looks like this:

NSIS-HelloWorld-1

If we click on Show details button, we can see the following:

NSIS-HelloWorld-2

We can use ShowInstDetails in order to make installer displaying details by default:



We can use DetailPrint in order to output our custom messages:



And so Installer displays our custom text and Details window by default:

NSIS-HelloWorld-3


If we want to perform some system checks when installer starts, we can place our code in predefined function .onInit. In the next example, we'll just put displaying message box:



When we run installer, message box is first displayed:

NSIS-HelloWorld-4

When we click on OK, main window shows:

NSIS-HelloWorld-5

I used instruction Name to customize title of Installer's windows.

We can do some more serious stuff in .onInit function, like Windows version check. Download GetWindowsVersion.nsh header, create directory headers in the same directory where HelloWorld.nsi is, place GetWindowsVersion.nsh in that new directory (as we want to keep downloaded scripts separately from our work), include that header in the script and call function it exposes - GetWindowsVersion:



Message box displays Windows version:

NSIS-HelloWorld-6

NOTE: Files with extension nsi are installer script files and files with extension nsh are installer headers.

NOTE: DetailPrint calls from .onInit are ignored.