::Section
Usage: Section <section name>
Begins and opens a new section. If <section name> is empty, omitted, or begins with a -, then it is a required section and the user will not see it, nor have the option of disabling it. If the section name is 'Uninstall', then it is a special Uninstall Section. 


::Name
Usage: Name <name>
Sets the name of the installer. The name is usually simply the product name such as 'MyApp' or 'CrapSoft MyApp'.


::SetOutpath
Usage: SetOutPath <outpath>
Sets the output path ($OUTDIR) and creates it (recursively if necessary), if it does not exist. Must be a full pathname, usually is just $INSTDIR (you can specify $INSTDIR if you are lazy with a single "-"). 
See also: Variables

::SectionDivider
Usage: SectionDivider <divider caption>
This command inserts a divider into the section list that the user sees. If a divider caption is specified, it will be shown on the divider.


::File
Usage: File ([/r] file|wildcard [...]) | (/oname=file.dat infile.dat)
Adds file(s) to be extracted to the current output path ($OUTDIR). 
Note that the output file name is $OUTDIR\filename_portion_of_file. 
If the /oname=X switch is used, the output name becomes $OUTDIR\X. When using the /oname= switch, only one file can be specified, and the file name can contain variables (or a fully qualified path, i.e. $SYSDIR\whatever.dll). 
Wildcards are supported. 
If the /r switch is used, files and directories are added recursively. If is no trailing wildcard (i.e. File /r C:\whatever\mydir), then the whole tree of mydir will go in $OUTDIR\mydir. To put it in $OUTDIR, use File /r C:\whatever\mydir\*.* 
The File command sets the error flag if overwrite mode is set to 'try' and the file could not be overwritten, or if the overwrite mode is set to 'on' and the file could not be overwritten and the user selects ignore. 


::Outfile
Usage: OutFile <setup.exe>
Specifies the output file that the MakeNSIS should write the installer to. This is just the file that MakeNSIS writes, it doesn't effect the contents of the installer. 


::InstType
Usage: InstType install_type_name | /NOCUSTOM | /CUSTOMSTRING=str| /COMPONENTS.. ..ONLYONCUSTOM
Adds an install type to the install type list, or disables the custom install type. There can be as many as 8 types, each one specifying the name of the install. The first type is the default (generally 'Typical'). Each type is numbered, starting at 1. See SectionIn for information on how those numbers are used. If the /NOCUSTOM switch is specified, then the "custom" install type is disabled, and the user has to choose one of the pre-defined install types. Alternatively, if the /CUSTOMSTRING switch is specified, the parameter will override the "Custom" install type text. Alternatively, if the /COMPONENTSONLYONCUSTOM flag is specified, the component list will only be shown if the "Custom" install type is selected. 


::Additional File
Defines a file that is copied with your installer when using the Project/Media export function. Examples may be "autorun.inf" and <project>.ico, when creating a CD installation.


::NSISplus project
A project in NSISplus is simply a .nsi file, normaly enriched with some pseudo commands which are ignored by NSIS.


::Project settings
Listbox with checkboxes:
All your config definitions go here and you can choose the active one by clicking on the small box left to the name (setting a checkmark into it).
The idea is to have several configs, e.g. for an english or german installer, for fast "debug" compiling or small sized release version etc.

"Name":
The name of the configuration setting (shown in the window title and in the output area before the compiler is called).
This field (and all the other below) are automatically filled while changig the selection in the Listbox; use the "New" button to create a new config

"Cmdline": you can use the following compiler switches:
* /LICENSE displays a keen license page. 
* The /V switch followed by a number between 0 and 4 will set the verbosity of output accordingly. 0=no output, 1=errors only, 2=warnings and errors, 3=info, warnings, and errors, 4=all output. 
* The /O switch followed by a filename tells the compiler to print its log to that file (instead of the screen) 
* /PAUSE makes Makensis pause before quitting, which is useful when executing directly from Windows (the auto-installed shell extensions use it). 
* /NOCONFIG disables inclusion of [path to makensis.exe]\nsisconf.nsi . Without this parameter, installer defaults are set from nsisconf.nsi. See NSIS Configuration File. 
* /CMDHELP prints basic usage information for command (if specified), or all commands (if command is not specified). 
* /HDRINFO prints out information on what options Makensis was compiled with. 
* /CD tells the compiler to switch to the directory of the script it is currently compiling. 
* Using the /D switch one or more times will add to symbols to the globally defined list (See !define). 
* Using the /X switch one or more times will execute the code you specify following it. Example: "/XAutoCloseWindow false" 
* Specifying a dash (-) for the script name will tell Makensis to use the standard input as a source. 
* If multiple scripts are specified, they are treated as one concatenated script. 

Aside from this, you can use the following variables inside NSISplus:
* ${.PROJECT} expands to the current project file
   (eg "c:\program files\test\test.nsi")
* ${.YEAR} expands to the current year
   (expample: '.../DmyYear=${.YEAR}...')
* ${.MONTH} expands to the current month
   (example: '.../DmyMonth=${.MONTH}...')
* ${.DAY} expands to the current day
   (example:  '.../DmyDay=${.DAY}...')
* ${.HOUR} expands to the current hour
   (example: '.../DmyHour=${.HOUR}...')
* ${.MINUTE} expands to the current minute
   (example:  '.../DmyMinute=${.MINUTE}...')
* ${.SECOND} expands to the current second
   (example: '.../DmySecond=${.SECOND}...')
* ${.DATE} expands to '/D.YEAR=<year> /D.MONTH=<month> /D.DAY=<day> /D.HOUR=<hour> /D.MINUTE=<minute> /D.SECOND=<second>'
* ${.CONFIG} expands to the name of the current configuration
   (example: '.../DmyConfig=${.CONFIG}...')

"Custom compiler"
Use this switch if you need to compile your project with other compilers than the two installed with NSIS.

"Use bz2"
If this switch is checked, NSISplus will use the makeNSIS-bz2 compiler, otherwise the makeNSIS compiler will be used.


::WindowIcon
Usage: WindowIcon on|off
Sets whether or not the installer's icon is in the upper left corner of the installer.


::SilenInstall
Usage: SilentInstall normal | silent | silentlog
Specifies whether or not the installer should be silent. If it is 'silent' or 'silentlog', all sections are installed quietly, with no screen output from the installer itself (MessageBoxes are still displayed on error, and the script can still display whatever it wants). Note that if this is set to 'normal' and the user runs the installer with /S on the command line, it will behave as if SilentInstall 'silent' was used. 


::SilentUninstall
Usage: SilentUninstall normal | silent
Specifies whether or not the uninstaller should be silent. 


::CRCCheck
Usage: CRCCheck on | off
Specifies whether or not the installer will perform a CRC on itself before allowing an install.
Valid options are 'on' and 'off'.
Note that if the user uses /NCRC on the command line when executing the installer, the CRC will not occur, and the user will be allowed to install a (potentially) corrupted installer. 


::DirShow
Usage: DirShow show | hide
Specifies whether or not the user will see the directory selection page.
Note that if 'hide' is specified, the installer will still check the validity of the installation path (using internal logic and .onVerifyInstDir if it is declared).
If the path is deemed invalid, the directory page will be shown.
To completely disable the Directory page (and install without prompting, even if a valid installation path is not available), specify DirText with no parameter (this might be useful if the installer installs everything into $SYSDIR or something like that). 


::AllowRootDirInstall
Usage: AllowRootDirInstall true | false
Controls whether or not installs are enabled to the root directory of a drive, or directly into a network share.
Set to 'true' to change the default (safe) behavior, which prevents users from selecting C:\ or \\server\share as an install (and lataer on, uninstall) directory. 

::InstallColors
Usage InstallColors /windows | foreground background
Sets the colors to use for the install info screen (the default is 00FF00 000000.
Use the form RRGGBB (in hexadecimal, as in HTML, only minus the leading '#', since # can be used for comments).
Note that if "/windows" is specified as the only parameter, the default windows colors will be used. 

::InstProgressFlags
Usage: InstProgressFlags [flag [...]]
Valid values for flag are "smooth" (smooth the progress bar) or "colored" (color the progress bar with the colors set by InstallColors.
Examples: "InstProgressFlags" (default old-school windows look), "InstProgressFlags smooth" (new smooth look), "InstProgressFlags smooth colored" (colored smooth look whee). 


::AutoCloseWindow
Usage: AutoCloseWindow true|false
Sets whether or not the install window automatically closes when completed.
Can be 'false' or 'true'. This is overrideable from a section using SetAutoClose. 


::ShowInstDetails
Usage: hide | show | nevershow
Sets whether or not the details of the install are shown. Can be 'hide' (the default) to hide the details by default, allowing the user to view them, or 'show' to show them by default, or 'nevershow', to prevent the user from ever seeing them.
Note that sections can override this using SetDetailsView. 


::ShowUninstDetails
Usage: ShowUninstDetails hide | show | nevershow
Sets whether or not the details of the uninstall are shown.
Can be 'hide' (the default) to hide the details by default, allowing the user to view them, or 'show' to show them by default, or 'nevershow', to prevent the user from ever seeing them.
Note that sections can override this using SetDetailsView. 


::Compiler switches
This folder contains all the switches used by makeNSIS. Switches already used in the project are displayed in black, unused switches are displayed in grey


::Compiler strings
This folder contains all the strings used by makeNSIS. Strings already used in the project are displayed in black, unused strings are displayed in grey


::Compiler paths
This folder contains all the paths used by makeNSIS. Paths already used in the project are displayed in black, unused paths are displayed in grey


::SetOverwrite
Usage: SetOverwrite on | off | try | ifnewer
This command sets the overwrite flag which is used by the File command to determine whether or not the file should overwrite any existing files that are present.
If overwriteflag is 'on', files are overwritten (this is the default).
If overwriteflag is 'off', files that are already present are not overwritten. If overwriteflag is 'try', files are overwritten if possible (meaning that if the file is not able to be written to, it is skipped without any user interaction).
If overwriteflag is 'ifnewer', then files are only overwritten if the existing file is older than the new file (note that when in 'ifnewer' mode, the destination file's date is set, regardless of what SetDateSave is set to). 


::SetCompress
Usage: SetCompress auto | force | off
This command sets the compress flag which is used by the installer to determine whether or not data should be compressed.
Typically the SetCompress flag will effect the commands after it, and the last SetCompress command in the file also determines whether or not the install info section and uninstall data of the installer is compressed.
If compressflag is 'auto', then files are compressed if the compressed size is smaller than the uncompressed size.
If compressflag is set to 'force', then the compressed version is always used.
If compressflag is 'off' then compression is not used (which can be faster


::SetDatablockOptimize
Usage: SetDatablockOptimize on | off
This command tells the compiler whether or not to do datablock optimizations.
Datablock optimizations have the compiler check to see if any data being added to the data block is already in the data block, and if so, it is simply referenced as opposed to added (can save a little bit of size). 

::SetDateSave
Usage: SetDateSave on|off
This command sets the file date/time saving flag which is used by the File command to determine whether or not to save the last write date and time of the file, so that it can be restored on installation.
Valid flags are 'on' and 'off'.
'on' is the default. 


::BGGradient
Usage: BGGradient [off] | [topcolor botcolor [textcolor|notext]]
Specifies whether or not to use a gradient background window.
If 'off', the installer will not show a background window, if no parameters are specified, the default black to blue gradient is used, and otherwise the top_color or bottom_color are used to make a gradient.
Top_color and bottom_color are specified using the form RRGGBB (in hexadecimal, as in HTML, only minus the leading '#', since # can be used for comments). 
'textcolor' can be specified as well, or 'notext' can be specified to turn the big background text off. 


::Caption
Usage: Caption text
Sets what the titlebars of the installer will display. By default, it is 'Name Setup', where Name is specified with the Name command.
You can, however, override it with 'MyApp Installer' or whatever.
If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string) 


::SubCaption
Usage: SubCaption page_number subcaption
Overrides the subcaptions for each of the installer pages
	0=": License Agreement"
	1=": Installation Options"
	2=": Installation Directory"
	3=": Installing Files"
	4=": Completed"
If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string) 


::MiscButtonText
Usage: MiscButtonText [back button text] [next button text] [cancel button text] [close button text]
Replaces the default text strings for the four buttons (< Back, Next >, Cancel and Close).
If parameters are omitted, the defaults are used. 


::InstallButtonText
Usage: InstallButtonText text
If parameter is specified, overrides the default install button text (of "Install") with the specified text. 


::FileErrorText
Usage: FileErrorText
Replaces the default text that comes up when a file cannot be written to.
This string can contain a reference to $0, which is the filename ($0 is temporarily changed to this value).
Example: "Can not write to file $\r$\n$0$\r$\ngood luck, bitch.". 


::LicenseText
Usage: LicenseText text [button_text]
Specifies a string that is above the license text. Omit this to not have a license displayed.
If button_text is specified, it will override the default button text of "I Agree". 


::ComponentText
Usage: ComponentText [text] [subtext] [subtext2] 
Specifies a string that is above the component list.
This can be something that notifies the user what it is they are actually installing.
Note that if no parameter is specified, or if the ComponentText command is omitted, then the component page will not be visible, and all of the sections will be installed.
Note: if text is specified and non-empty and you leave subtext or subtext2 empty, the defaults will be used (to set one to blank, use a string like " ").
Empty strings mean default on subtext and subtext2.
Likewise, if you wish to enable the component page, but don't want any text on the top line, set text to " ". 


::SpaceTexts
Usage: SpaceTexts [req text] [avail text] 
If parameters are specified, overrides the space required and space available text ("Space required: " and "Space available: " by default). 


::DirText
Usage: DirText [text] [subtext] [browse text]
Specifies a string that is above the directory selection area.
If this command is not specified, or no parameter is specified, then the directory page is never visible to the user (even if DirShow show is specified).
If subtext is specified and not empty, it overrides the default text above the path entry box ("Select the directory to install MyApp in:").
If browse button text is specified but not empty, it overrides the default browse button text ("Browse..."). 


::DetailsButtonText
Usage: DetailsButtonText [show details text]
Replaces the default details button text of "Show details", if parameter is specified (otherwise the default is used). 


::CompletedText
Usage: CompletedText [Completed text]
Replaces the default text ("Completed") that is printed at the end of the install if parameter is specified.
Otherwise, the default is used. 


::UninstallText
Usage: UninstallText text [subtext]
Specifies the text on the first page of the uninstaller.
If subtext is specified and not empty, it will replace the default secondary text on that page, "Uninstall from:". 


::UninstallCaption
Usage: UninstallCaption caption
Sets what the titlebars of the uninstaller will display.
By default, it is 'Name Uninstall', where Name is specified with the Name command.
You can, however, override it with 'MyApp uninstaller' or whatever.
If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string).


::UninstallSubCaption
Usage: UninstallSubCaption page_number subcaption
Overrides the subcaptions for each of the uninstaller pages
	0=": Confirmation"
	1=": Uninstalling Files"
	2=": Completed"
If you specify an empty string (""), the default will be used (you can however specify " " to achieve a blank string) 


::UninstallButtonText
Usage: UninstallButtonText [button text]
Changes the text of the button that by default says "Uninstall" in the uninstaller.
If no parameter is specified, the default text is used. 


::OutFile
Usage: OutFile install.exe
Specifies the output file that the MakeNSIS should write the installer to.
This is just the file that MakeNSIS writes, it doesn't effect the contents of the installer. 


::Icon
Usage: Icon path_to_icon.ico
Sets the icon of the installer.
The icon MUST contain a 32x32x16 color icon resource (it can also contain other icons, but they will be discarded). 


::LicenseData
Usage: LicenseData licdata.txt
Specifies a text file to use for the license that the user can read.
Omit this to not have a license displayed.
Note that the file must be in the evil DOS text format (\r\n, yeah!) 


::EnabledBitmap
Usage: EnabledBitmap bitmap.bmp
Sets the enabled state of the listbox for the component page.
It MUST be a 16 color bitmap (it can be any size, but 20x20 is preferred -- all others will be resized down... poorly). 


::DisabledBitmap
Usage: DisabledBitmap bitmap.bmp
Sets the disabled state of the listbox for the component page.
It MUST be a 16 color bitmap (it can be any size, but 20x20 is preferred -- all others will be resized down... poorly). 


::UninstallIcon
Usage: UninstallIcon path_to_icon.ico
Sets the icon of the uninstaller.
Again, the icon MUST contain a 32x32x16 color icon resource (it can also contain other icons, but they will be discarded). 


::Variables
$PROGRAMFILES	The program files directory (usually C:\Program Files but detected at runtime).
$DESKTOP		The windows desktop directory (usually C:\windows\desktop but detected at runtime).
$EXEDIR			The location of the installer executable. (technically you can modify this variable, but it is probably not a good idea)
$WINDIR			The windows directory (usually C:\windows or C:\winnt but detected at runtime)
$SYSDIR			The windows system directory (usually C:\windows\system or C:\winnt\system32 but detected at runtime)
$TEMP			The system temporary directory (usually C:\windows\temp but detected at runtime)
$STARTMENU		The start menu folder (useful in adding start menu items using CreateShortCut)
$SMPROGRAMS		The start menu programs folder (use this whenever you want $STARTMENU\Programs)
$SMSTARTUP		The start menu programs / startup folder
$QUICKLAUNCH	The quick launch folder for IE4 active desktop and above. If quick launch is not available, simply returns the same as $TEMP.
$INSTDIR			The install directory
$OUTDIR			The current output path. 
$HWNDPARENT	The decimal HWND of the parent window.
$$				Use to represent $.
$\r				Use to represent a carriage return (\r).
$\n				Use to represent a newline (\n).
${SYMBOL}		Where SYMBOL is the name of something globally defined, this will be replaced with the value of that symbol.
				If the symbol is not defined, no replace occurs (i.e. if ${POOP} is encountered, and POOP is not defined, ${POOP} is output).
::Media Export
Set the destination folder by typing it manually or by using the "..." button.
Select the files to copy by checking/unchecking the items in the listbox.
All the checked files will be copied to the desitnation folder when you click the OK button.

::CreateShortcut
Usage: CreateShortcut link.lnk target.file [parameters] [icon.file] [icon_index_number] [start_options] [keyboard_shortcut]
Creates a shortcut 'link.lnk' that links to 'target.file', with optional parameters 'parameters'. 
* The icon used for the shortcut is 'icon.file,icon_index_number'; for default icon settings use empty strings for both icon.file and icon_index_number. 
* start_options should be one of: SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, or an empty string. 
* keyboard_shortcut should be in the form of 'flag|c' where flag can be a combination (using |) of: ALT, CONTROL, EXT, or SHIFT. c is the character to use (a-z, A-Z, 0-9, F1-F24, etc). Note that no spaces are allowed in this string. A good example is "ALT|CONTROL|F8". $OUTDIR is used for the working directory. 
The error flag is set if the shortcut cannot be created (i.e. the path does not exist, or some other error). 

See also: Variables


::Edit Shortcut
This dialog allows you to make your installer create Shortcuts anywhere on the end users system.
The first two fields, "File" and "Link to", are required, the others are optional;
the meaning of the fields should be clear (if you ever created a shortcut on windows, if not, you should try that first).

See also: CreateShortcut (Syntax), Variables


::Permanent settings
Editor
Path to any ascii editor; NSISplus calls it when you use Projekt/Edit source. Leave this field blank if you want to use the sourcecode editor defined by NSIS (currently Notepad)

Reload last project at startup
If this option is enabled and NSISplus ist started w/o comand line, it will load the project that was active the last time you worked with NSISplus

Copy version number from VS project into VER_MAJOR/VER_MINOR
Determines the internal version number (product version) of the file marked as VS project and copys the values into the defines VER_MAJOR/VER_MINOR of your project.

Backup project files
Creates a copy of the project file everytime NSISplus saves your changes.

AutoHelp
Clicks on the "Help"-Buttons and Menu entrys automatically as you change the context (changing selection in the project tree, open a dialog etc)

::Project Todo List
Icons:
* Increase Indentation (Shortcut: +)
* Decrease Indentation (Shortcut: -)
* Move item up one line
* Move item down one line
* Create new item (Shortcut: Strg+N)
* Edit current item (Shortcut: F2)
* Delete current item (Shortcut: Strg+D)

* Open on load: opens this dialog automatically after the project is loaded
* Open on compile: opens this dialog automatically before the project is compiled


::SectionIn
Usage: SectionIn section_index_list
This command specifies which Install Types (see InstType) the current section defaults to the enabled state in.
You can specify numbers, with any characters (or none) delimiting (i.e. 1258 or 1,2,5,8 or 1-2-5-8 or 1 2 5 8 all do the same thing).
Alternatively, multiple SectionIn commands can be specified (they are combined). 


::SectionEnd
Usage: SectionEnd
This command closes the current open section. 


::AddSize
Usage: AddSize size_kb
Tells the installer that the current section needs an additional "size_kb" kilobytes of disk space.
Only valid within a section (will have no effect outside of a section or in a function). 


::Function
Usage: Function function_name
Creates and opens a function named function_name. 


::FunctionEnd
Usage: FunctionEnd
Ends the current open function. 


::Exec
Usage: Exec command
Execute the specfied program and continue immediately.
Note that the file specified must exist on the target system, not the compiling system. 
$OUTDIR is used for the working directory. 
The error flag is set if the process could not be launched. 
Note, if the command could have spaces, you may with to put it in quotes to delimit it from parameters. 
i.e.: Exec '"$INSTDIR\command.exe" parameters'. 


::ExecWait
Usage: ExecWait command [user_var(exit code)]
Execute the specfied program and wait for the executed process to quit.
See Exec for more information.
If no output variable is specified ExecWait sets the error flag if the program executed returns a nonzero error code, or if there is an error.
If an output variable is specified, ExecWait sets the variable with the exit code (and only sets the error flag if an error occurs; if an error occurs the contents of the user variable are undefined).
Note, if the command could have spaces, you may with to put it in quotes to delimit it from parameters.
i.e.: ExecWait '"$INSTDIR\command.exe" parameters' 


::ExecShell
Usage ExecShell action command [parameters] [SW_SHOWNORMAL |  SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED]
Execute the specfied program using ShellExecute.
Note that action is usually "open", "print", etc, but can be an empty string to use the default action.
Parameters and the show type are optional. $OUTDIR is used for the working directory.
The error flag is set if the process could not be launched. 


::Rename
Usage: Rename [/REBOOTOK] source_file dest_file
Rename source_file to dest_file. Functions just like the win32 API MoveFile, which means you can move a file from anywhere on the system to anywhere else, and you can move a directory to somewhere else on the same drive.
If /REBOOTOK is specified, and the file cannot be overwritten, then the file is moved when the system reboots -- if the file will be moved on a reboot, the reboot flag will be set.
The error flag is set if the file cannot be renamed (and /REBOOTOK is not used) or if the source file does not exist. 


::Delete
Usage: Delete [/REBOOTOK] file
Delete file (which can be a file or wildcard, but should be specified with a full path) from the target system.
If /REBOOTOK is specified and the file cannot be deleted then the file is deleted when the system reboots -- if the file will be deleted on a reboot, the reboot flag will be set.
The error flag is set if files are found and cannot be deleted.
The error flag is not set from trying to delete a file that does not exist. 


::RMDir
Usage RMDir [/r] directory
Remove the directory (which should be a full path). If /r is specified, it will recursively remove the directory.
The error flag is set if the directory exists and cannot be removed. 


::WriteRegStr, WriteRegExpandStr
Usage: WriteRegStr root_key subkey key_name value
Write a string to the registry. root_key must be one of:
* HKCR or HKEY_CLASSES_ROOT 
* HKLM or HKEY_LOCAL_MACHINE 
* HKCU or HKEY_CURRENT_USER 
* HKU or HKEY_USERS 
* HKCC or HKEY_CURRENT_CONFIG 
* HKDD or HKEY_DYN_DATA 
* HKPD or HKEY_PERFORMANCE_DATA 
The error flag is set if the string could not be written to the registry.
The type of the string will be REG_SZ for WriteRegStr, or REG_EXPAND_STR for WriteRegExpandStr. 


::WriteRegDWORD
Usage WriteRegDWORD root_key subkey key_name value
This command writes a dword (32 bit integer) to the registry (a user variable can be specified).
Valid values for root_key are listed under WriteRegStr.
The error flag is set if the dword could not be written to the registry. 


::WriteRegBin
Usage: WriteRegBin root_key subkey key_name valuedata
This command writes a block of binary data to the registry. Valid values for root_key are listed under WriteRegStr.
Valuedata is in hexadecimal (i.e. DEADBEEF01223211151).
The error flag is set if the binary data could not be written to the registry. 


::WriteINIStr
Usage WriteINIStr ini_filename section_name entry_name value
Writes entry_name=value into [section_name] of ini_filename.
The error flag is set if the string could not be written to the ini file. 


::ReadRegStr
Usage: ReadRegStr  user_var(output) root_key sub_key name 
Reads from the registry into the user variable $x. Valid values for root_key are listed under WriteRegStr.
The error flag will be set and $x will be set to an empty string ("") if the string is not present.
If the value is present, but is of type REG_DWORD, it will be read and converted to a string and the error flag will be set. 


::ReadRegDWORD
Usage: ReadRegDWORD user_var(output) root_key sub_key name
Reads a 32 bit DWORD from the registry into the user variable $x. Valid values for root_key are listed under WriteRegStr.
The error flag will be set and $x will be set to an empty string ("" which is 0) if the DWORD is not present.
If the value is present, but is not a DWORD, it will be read as a string and the error flag will be set. 


::ReadINIStr
Usage: ReadINIStr user_var(output) ini_filename section_name entry_name
Reads from entry_name in [section_name] of ini_filename and stores the value into user variable $x.
The error flag will be set and $x will be assigned to an empty string if the entry is not found. 


::ReadEnvStr
Usage: ReadEnvStr  user_var(output) name 
Reads from the environment string "name" and sets the value into the user variable $x.
If there is an error reading the string, the user variable is set to empty, and the error flag is set. 


::ExpandEnvStrings
Usage: ExpandEnvStrings user_var(output) string 
Expands environment variables in "string" into the user variable $x.
If error, the variable is set to empty, and the error flag is set. 


::DeleteRegValue
Usage DeleteRegValue root_key subkey key_name
Deletes a registry value. Valid values for root_key are listed under WriteRegStr.
The error flag is set if the value could not be removed from the registry (or if it didn't exist to begin with). 


::DeleteRegKey
Usage: DeleteRegKey [/ifempty] root_key subkey
Deletes a registry key. If /ifempty is specified, the registry key will only be deleted if it has no subkeys (otherwise, the whole registry tree will be removed).
Valid values for root_key are listed under WriteRegStr.
The error flag is set if the key could not be removed from the registry (or if it didn't exist to begin with). 


::EnumRegKey
Usage: EnumRegKey user_var(output) root_key subkey index
Set user variable $x with the name of the 'index'th registry key in root_key\subkey. Valid values for root_key are listed under WriteRegStr.
Returns an empty string if there are no more keys, and returns an empty string and sets the error flag if there is an error. 


::EnumRegValue
Usage: EnumRegValue user_var(output) root_key subkey index
Set user variable $x with the name of the 'index'th registry value in root_key\subkey. Valid values for root_key are listed under WriteRegStr.
Returns an empty string if there are no more values, and returns an empty string and sets the error flag if there is an error. 


::DeleteINISec
Usage: DeleteINISec ini_filename section_name
Deletes the entire section [section_name] from ini_filename.
If the section could not be removed from the ini file, the error flag is set. 


::DeleteINIStr
Usage DeleteINIStr ini_filename section_name str_name
Deletes the string str_name from section [section_name] from ini_filename.
If the string could not be removed from the ini file, the error flag is set. 


::CreateDirectory
Usage: CreateDirectory path_to_create
Creates (recursively if necessary) the specified directory.


::CopyFiles
Usage: CopyFiles [/SILENT] [/FILESONLY] filespec_on_destsys destination_path [size_of_files_in_kb]
Copies files from the source to the destination on the installing system. Useful with $EXEDIR if you want to copy from installation media, or to copy from one place to another on the system. 
Uses SHFileOperation, so the user might see a status window of the copy operation if it is large (to disable this, use /SILENT). 
The last parameter specifies how big the copy is (in kilobytes), so that the installer can approximate the disk space requirements.
On error, or if the user cancels the copy (only possible when /SILENT was omitted), the error flag is set.
If /FILESONLY is specified, only files are copied. 


::SetFileAttributes
Usage: SetFileAttributes filename attribute1|attribute2|...
Sets the file attributes of 'filename' (which can contain wildcards). Valid attributes can be combined with | and are:
* NORMAL or FILE_ATTRIBUTE_NORMAL (you can use 0 to abbreviate this) 
* ARCHIVE or FILE_ATTRIBUTE_ARCHIVE 
* HIDDEN or FILE_ATTRIBUTE_HIDDEN 
* OFFLINE or FILE_ATTRIBUTE_OFFLINE 
* READONLY or FILE_ATTRIBUTE_READONLY 
* SYSTEM or FILE_ATTRIBUTE_SYSTEM 
* TEMPORARY or FILE_ATTRIBUTE_TEMPORARY 
The error flag will be set if the file's attributes cannot be set (i.e. the file doesn't exist, or you don't have the right permissions) 


::GetFullPathName
Usage: GetFullPathName [/SHORT] user_var(output) path_or_file
Assign to the user variable $x, the full path of the file specified. 
If the path portion of the parameter is not found, the error flag will be set and $x will be empty.
If /SHORT is specified, the path is converted to the short filename form. 


::SearchPath
Usage: SearchPath user_var(output) filename
Assign to the user variable $x, the full path of the file named by the second parameter. 
The error flag will be set and $x will be empty if the file cannot be found.
Uses SearchPath() to search the system paths for the file. 


::GetTempFileName
Usage: GetTempFileName user_var(output)
Assign to the user variable $x, the name of a temporary file.
The file will have been created, so you can then overwrite it with what you please.
The name of the temporary file is guaranteed to be unique.
Delete the file when done with it. 


::CallInstDLL
Usage: CallInstDLL dllfile function
Calls a NSIS extension DLL. See Contrib\ExDLL for an example of how to make one.
Extension DLLs can access the stack and variables. 


::RegDLL
Usage RegDLL dllfile [entrypoint_name]
Loads the specified DLL and calls DllRegisterServer (or entrypoint_name if specified).
The error flag is set if an error occurs (i.e. it can't load the DLL, initialize OLE, or find the entry point). 


::UnRegDLL
Usage: UnRegDLL dllfile
Loads the specified DLL and calls DllUnregisterServer.
The error flag is set if an error occurs (i.e. it can't load the DLL, initialize OLE, or find the entry point). 


::GetDLLVersion
Usage: GetDLLVersion filename user_var(high dword output) user_var(low dword output)
Gets the version information from the DLL in "filename". Sets the user output variables with the high and low dwords of version information on success;
on failure the outputs are empty and the error flag is set. 


::GetDLLVersionLocal
Usage: GetDLLVersionLocal localfilename user_var(high dword output) user_var(low dword output)
This is similar to GetDLLVersion, only it acts on the system building the installer (it actually compiles into two StrCpy commands).
Sets the two output variables with the DLL version information of the DLL on the build system. 


::GetFileTime
Usage: GetFileTime filename user_var(high dword output) user_var(low dword output)
Gets the last write time of "filename". Sets the user output variables with the high and low dwords of the timestamp on success;
on failure the outputs are empty and the error flag is set. 


::GetFileTimeLocal
Usage: GetFileTimeLocal localfilename user_var(high dword output) user_var(low dword output)
This is similar to GetFileTime, only it acts on the system building the installer (it actually compiles into two StrCpy commands).
Sets the two output variables with the file timestamp of the file on the build system. 


::Goto
Usage: Goto label_to_jump_to | +offset | -offset | user_var(target)
If label is specified, goto the label 'label_to_jump_to:'. 
If +offset or -offset is specified, jump is relative by offset instructions.
Goto +1 goes to the next instruction, Goto -1 goes to the previous instruction, etc.
If a user variable is specified, jumps to absolute address (generally you will want to get this value from a function like GetLabelAddress.
I Compiler flag commands and SectionIn aren't instructions so jumping over them has no effect. 


::Call
Usage: Call function_name | :label_name
Calls the function named function_name. If in the Uninstall section, Call can only be used with function names beginning with "un.". 
If the parameter starts with a ':' it will be treated as a label (so you can call to a label in your function - this is probably not going to be used most of the time). 


::Return
Usage: Return
Returns from a function or section.


::IfErrors
Usage: IfErrors jumpto_iferror [jumpto_ifnoerror]
Checks and clears the error flag, and if it is set, it will goto jumpto_iferror, otherwise it will goto jumpto_ifnoerror.
The error flag is set by other instructions when a recoverable error (such as trying to delete a file that is in use) occurs. 


::ClearErrors
Usage: ClearErrors
Clears the error flag. 


::SetErrors
Usage SetErrors
Sets the error flag.


::FindWindow
Usage: FindWindow user_var(hwnd output) windowclass [windowtitle] [windowparent] [childafter]
Searches for a window. Behaves like the win32 FindWindowEx(). Seaches by windowclass (and/or windowtitle if specified).
If windowparent or childafter are specified, the search will be restricted as such. 
If windowclass or windowtitle is specified as "", they will not be used for the search.
If the window is not found, the user variable returned is 0.
To accomplish old-style FindWindow behavior, use FindWindow with SendMessage. 


::SendMessage
Usage: SendMessage HWND msg wparam lparam [user_var(return value)]
Sends a message to HWND. If a user variable $x is specified as the last parameter, the return value of SendMessage will be stored to it.
Note that when specifying 'msg' you must just use the integer value of the message. Here are a few example messages and their values:
* WM_CLOSE 16 
* WM_COMMAND 273 
* WM_USER 1024 


::IsWindow
Usage: IsWindow HWND jump_if_window [jump_if_not_window]
If HWND is a window, Gotos jump_if_window, otherwise, Gotos jump_if_not_window (if specified). 


::IfFileExists
Usage: IfFileExists FileToCheckFor JumpIfPresent [JumpOtherwise]
Checks for existence of file(s) FileToCheckFor (which can be a wildcard, or a directory), and Gotos JumpIfPresent if the file exists, otherwise Gotos JumpOtherwise.
If you want to check to see if a file is a directory, use IfFileExists DIRECTORY\*.* 


::MessageBox
Usage MessageBox mb_option_list messagebox_text [return_check jumpto] [return_check_2  jumpto_2]
Displays a MessageBox containing the text "messagebox_text". mb_option_list must be one or more of the following, delimited by |s (i.e. MB_YESNO|MB_ICONSTOP). 
* MB_OK - Display with an OK button 
* MB_OKCANCEL - Display with an OK and a cancel button 
* MB_ABORTRETRYIGNORE - Display with abort, retry, ignore buttons 
* MB_RETRYCANCEL - Display with retry and cancel buttons 
* MB_YESNO - Display with yes and no buttons 
* MB_YESNOCANCEL - Display with yes, no, cancel buttons 
* MB_ICONEXCLAMATION - Display with exclamation icon 
* MB_ICONINFORMATION - Display with information icon 
* MB_ICONQUESTION - Display with question mark icon 
* MB_ICONSTOP - Display with stop icon 
* MB_TOPMOST - Make messagebox topmost 
* MB_SETFOREGROUND - Set foreground 
* MB_RIGHT - Right align text 
* MB_DEFBUTTON1 - Button 1 is default 
* MB_DEFBUTTON2 - Button 2 is default 
* MB_DEFBUTTON3 - Button 3 is default 
* MB_DEFBUTTON4 - Button 4 is default 
return_check can be 0 (or empty, or left off), or one of the following: 
* IDABORT - Abort button 
* IDCANCEL - Cancel button 
* IDIGNORE - Ignore button 
* IDNO - No button 
* IDOK - OK button 
* IDRETRY - Retry button 
* IDYES - Yes button 
if the return value of the MessageBox is return_check, the installer will Goto jumpto. 


::StrCmp
Usage: StrCmp str1 str2 jump_if_equal [jump_if_not_equal]
Compares (case insensitively) str1 to str2. If str1 and str2 are equal, Gotos jump_if_equal, otherwise Gotos jump_if_not_equal. 


::IntCmp
Usage: IntCmp val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more]
Compares two integers val1 and val2. 
If val1 and val2 are equal, Gotos jump_if_equal, otherwise if val1 < val2, Gotos jump_if_val1_less, otherwise if val1 > val2, Gotos jump_if_val1_more. 


::IntCmpU
Usage: IntCmpU val1 val2 jump_if_equal [jump_if_val1_less] [jump_if_val1_more]
Compares two unsigned integers val1 and val2.
If val1 and val2 are equal, Gotos jump_if_equal, otherwise if val1 < val2, Gotos jump_if_val1_less, otherwise if val1 > val2, Gotos jump_if_val1_more.
Performs the comparison as unsigned integers. 


::Abort
Usage: Abort user_message
Cancels the install, stops execution of script, and displays user_message in the status display.
Note: you can use this from Callback Functions to do special things.
Note 2: When using from .onNextPage or .onPrevPage, the parameter to Abort can be an integer that specifies how many pages to skip. 


::Quit
Usage: Quit
Causes the installer to exit as soon as possible. After Quit is called, the installer will exit (no callback functions will get a chance to run). 


::GetFunctionAddress
Usage: GEtFunctionAddress user_var(output) function_name
Gets the address of the function and stores it in the output user variable. This user variable then can be passed to Call or Goto.
Note that if you Goto an address which is the output of GetFunctionAddress, your function will never be returned to (when the function you Goto'd to returns, you return instantly). 


::GetLabelAddress
Usage: GetLabelAddress user_var(output) label
Gets the address of the label and stores it in the output user variable. This user variable then can be passed to Call or Goto.
Note that you may only call this with labels accessible from your function, but you can call it from anywhere (which is potentially dangerous).
Note that if you Call the output of GetLabelAddress, code will be executed until it Return's (explicitly or implicitly at the end of a function), and then you will be returned to the statement after the Call. 


::GetCurrentAddress
Usage: GetCurrentAddress user_var(output)
Gets the address of the current instruction (the GetCurrentAddress) and stores it in the output user variable.
This user variable then can be passed to Call or Goto. 


::FindFirst
Usage: FindFirst  user_var(handle output) user_var(filename output) filespec 
Performs a search for 'filespec', placing the first file found in filename_output (a user variable).
It also puts the handle of the search into handle_output (also a user variable).
If no files are found, both outputs are set to empty, and the error flag is set. Best used with FindNext and FindClose.
Note that the filename output is without path. 


::FindNext
Usage: FindNext handle user_var(filename_output)
Continues a search began with FindFirst. handle should be the handle_output_variable returned by FindFirst.
If the search is completed (there are no more files), filename_output is set to empty, and the error flag is set.
Note that the filename output is without path. 


::FindClose
Usage: FindClose  handle 
Closes a search opened with FindFirst


::FileOpen
Usage: FileOpen  user_var(handle output) filename openmode 
Opens a file named "filename", and sets the handle output variable with the handle.
The openmode should be one of "r" (read) "w" (write, all contents of file are destroyed) or "a" (append, meaning opened for both read and write, contents preserved).
In all open modes, the file pointer is placed at the beginning of the file.
If the file cannot be opened, the handle output is set to empty, and the error flag is set. 


::FileClose
Usage: FileClose  handle
Closes a file handle opened with FileOpen.


::FileRead
Usage: FileRead handle user_var(output) [maxlen]
Reads a string from a file opened with FileOpen. The string is read until either a newline (or carriage return newline pair) occurs, or until a null byte is read, or until maxlen is met (if specified).
Strings are limited to 1024 characters.
If the end of file is read and no more data is available, the output string will be empty, and the error flag will be set. 


::FileWrite
Usage: FileWrite handle string
Writes a string to a file opened with FileOpen. If an error occurs writing, the error flag will be set.


::FileReadByte
Usage FileReadByte handle user_var(output)
Reads a byte from a file opened with FileOpen. The byte is stored in the output as an integer (0-255).
If the end of file is read and no more data is available, the output will be empty, and the error flag will be set. 


::FileWriteByte
Usage: FileWriteByte handle string 
Writes the integer interpretation of 'string' to a file opened with FileOpen. If an error occurs writing, the error flag will be set.
Note that the low byte of the integer is used, i.e. writing 256 is the same as writing 0, etc. 


::FileSeek
Usage: FileSeek handle offset [mode] [user_var(new position)]
Seeks a file opened with FileOpen. If mode is omitted or specified as SET, the file is positioned to "offset".
If mode is specified as CUR, then the file pointer is moved by offset. If mode is specified as END, the file pointer is set to a position relative to EOF.
If the final parameter "new position" is specified, the new file position will be stored to that variable. 


::SetDetailsView
Usage: SetDetailsView show|hide
Shows or hides the details, depending on which parameter you pass. Overrides the default details view, which is set via ShowInstDetails


::SetDetailsPrint
Usage: SetDetailsPrint none | listonly | textonly | both
Sets mode at which commands print their status. None has commands be quiet, listonly has status text only added to the listbox, textonly has status text only printed to the status bar, and both enables both (the default).
For extracting many small files, textonly is recommended (especially on win9x with smooth scrolling enabled). 


::SetAutoClose
Usage: SetAutoClose true|false
Overrides the default auto window-closing flag (specified for the installer using AutoCloseWindow, and false for the uninstaller).
Specify 'true' to have the install window immediately disappear after the install has completed, or 'false' to make it require a manual close.


::DetailPrint
Usage: DetailPrint user_message
Adds the string "user_message" to the details view of the installer.


::Sleep
Usage: Sleep sleeptime_in_ms
Pauses execution in the installer for sleeptime_in_ms milliseconds. sleeptime_in_ms can be a variable, i.e. "$0" or a number, i.e. "666".


::BringToFront
Usage: BringToFront
Makes the installer window visible and brings it to the top of the window list (i.e. if a command was executed that shows itself in front of the installer, a BringToFront would bring the installer back in focus). 


::HideWindow
Usage: HideWindow
Hides the installer.


::StrCpy
Usage: StrCpy user_var(destination) str [maxlen] [start_offset]
Sets the user variable $x with str. Note that str can contain other variables, or the user variable being set (concatenating strings this way is possible, etc).
If maxlen is specified, the string will be a maximum of maxlen characters (if maxlen is negative, the string will be truncated abs(maxlen) characters from the end).
If start_offset is specified, the source is offset by it (if start_offset is negative, it will start abs(start_offset) from the end of the string). 


::StrLen
Usage: StrLen  user_var(length output) str 
Sets user variable $x with the length of str.


::Push
Usage: Push string
Pushes a string onto the stack. The string can then be Popped off of the stack. 


::Pop
Usage: Pop user_var(out)
Pops a string off of the stack into user variable $x. If the stack is empty, the error flag will be set.


::Exch
Usage: Exch [user_var] | stack_index
When no parmater is specified, exchanges the top two elements of the stack.
When a parameter is specified and is a user variable, exchanges the top element of the stack with the parameter.
When a parameter is specified and is a positive integer, the parameter specifies which item on the stack that the top of the stack is swapped with.
If there are not enough items on the stack to accomplish the exchange, a fatal error will occur (to help you debug your code :). 


::IntOp
Usage: IntOp  user_var(output) value1 OP [value2] 
Combines value1 and (depending on OP) value2 into the user variable $x. OP is defined as one of the following:
+ ADDs value1 and value2 
- SUBTRACTs value2 from value1 
* MULTIPLIES value1 and value2 
/ DIVIDEs value1 by value2 
% MODULUSs value1 by value2 
| BINARY ORs value1 and value2 
& BINARY ANDs value1 and value2 
^ BINARY XORs value1 and value2 
~ BITWISE NEGATEs value1 (i.e. 7 becomes 4294917288) 
! LOGICALLY NEGATEs value1 (i.e. 7 becomes 0) 
|| LOGICALLY ORs value1 and value2 
&& LOGICALLY ANDs value1 and value2 


::IntFmt
Usage: IntFmt  user_var(output) format numberstring 
Formats the number in "numberstring" using the format "format", and sets the output to user variable $x. Example format strings include "%08X" "%u" etc. 


::Reboot
Usage: Reboot
Reboots the computer. Be careful with this one. If there is an error rebooting, this function sets the error flag and continues.
If the reboot is sucessful, this instruction does not return. 


::IfRebootFlag
Usage: IfRebootFlag [jump_if_set] [jump_if_not_set]
Checks the reboot flag, and jumps to jump_if_set if the reboot flag is set, otherwise jumps to jump_if_not_set.
The reboot flag can be set by Delete and Rename, or manually with SetRebootFlag. 


::SetRebootFlag
Usage: SetRebootFlag true|false
Sets the reboot flag to either true or false.


::WriteUninstaller
Usage: WriteUninstaller [Path\]exename.exe
Writes the uninstaller to the filename (and optionally path) specified.
Only valid from within an install section or function, and requires that you have an uninstall section in your script.
See also Uninstall configuration. You can call this one or more times to write out one or more copies of the uninstaller. 


::Jump labels
Syntax: <identifier>:
A label marks the destination of jump-comands in the makeNSIS language, such as IfErrors, MessageBox, IfFileExists, and StrCmp.
An empty string ("") and 0 both represent the next instruction (meaning no Goto will occur).
Labels beginning with a period (.) are global, meaning you can jump to them from any function or section (though you cannot jump to an uninstall global label from the installer, and vice versa). 


::!system
Usage: !system command [compare comparevalue]
This command will execute 'command' using a call to system(), and if the return value compared (using 'compare') to 'comparevalue' is false, execution will halt.
'compare' can be '<' or '>' or '<>' or '=' or 'ignore'. 


::!include
Usage: !include file
This command will include 'file' as if it was part of the original script.
Note that if a file is included in another directory, the current directory is still where the script was compiled from (not where the included file resides). 


::!cd
Usage: !cd new_path
This command will change the compiler to the new directory, new_path. new_path can be relative or absolute. 


::!packhdr
Usage: !packhdr tempfile command
This option makes the compiler an external EXE packer (such as Petite or UPX) to compress the executable header.
Specify a temporary file name (such as "temp.dat") and a command line (such as "C:\program files\upx\upx -9 temp.dat") to compress the header. 


::!define
Usage: !define gflag [value]
This command will add 'gflag' to the global define list.
This will have a similar effect as using the /D switch on the command line (only the define only becomes effective after the !define command). 


::!undef
Usage: !undef gflag
Removes an item from the global define list. Note that ${SYMBOL} where SYMBOL is undefined will be translated to "${SYMBOL}".


::!ifdef
Usage: !ifdef gflag [bcheck [gflag [...]]]
This command, when paired with an !endif command, will tell the compiler whether or not to compile the lines in between the two lines.
If gflag is globally defined (using !define or the /D switch), then the contained lines will be compiled. Otherwise, they will be skipped.
'bcheck' can be specified as & (boolean and) or | (boolean or) along with more gflags -- precedence is simple, left to right.


::!ifndef
Usage: !ifndef gflag [bcheck [gflag [...]]]
This command is the opposite of !ifdef (If 'gflag' is not globally defined, the lines contained will be compiled).
Note that when using boolean operators (& or |), 'gflag' is treated as true if it is undefined.
I.e. '!ifndef X | Y' means "if either X or Y is undefined" and '!ifndef X & Y' means "if X and Y are both undefined". 


::!endif
Usage: !endif
This command closes a block started with !ifdef or !ifndef.


::!else
Usage: !else [ifdef|ifndef [...]]
This command is the logical lovemonkey to !ifdef and !endif.
!ifdef/!else/!endif, !ifdef/!else ifdef/!endif, !ifdef/!else ifdef/!else ifndef/!endif, etc.
If ifdef or ifndef is specified as the first parameter, it behaves as expected. 


::!macro
Usage: !macro macro_name
Creates a macro named 'macro_name'. All lines between the !macro and the !macroend will be saved.
To insert the macro later on, use !insertmacro. Note that macros cannot contain other macro definitions (though they can insert other macros), or !ifdef/!else/!endif. 


::!macroend
Usage: !macroend
Ends a macro that was started with !macro. 


::!insertmacro
Usage: !insertmacro macro_name
Inserts the contents of a macro that was created with !macro. 


::InstallDir
Usage: InstallDir definstdir
Sets the default installation directory is. See the variables section for variables that can be used to make this string (especially $PROGRAMFILES).
Note that the part of this string following the last \ will be used if the user selects 'browse', and may be appended back on to the string at install time (to disable this, end the directory with a \ (which will require the entire parameter to be enclosed with quotes)).
If this doesn't make any sense, play around with the browse button a bit. 


::InstallDirRegKey
Usage: InstallDirRegKey root_key subkey key_name
This attribute tells the installer to check a string in the registry, and use it for the install dir if that string is valid.
If this attribute is present, it will override the InstallDir attribute if the registry key is valid, otherwise it will fall back to the InstallDir default.
When querying the registry, this command will automatically remove any quotes.
If the string ends in ".exe", it will automatically remove the filename component of the string (i.e. if the string is "C:\program files\poop\poop.exe", it will know to use "C:\program files\poop").
For more advanced install directory configuration, set $INSTDIR in .onInit. 


::Help system
This window can be opened by hand using the "Help" buttons and context menu entries, or it opens/updates by itself, while you have set the "AutoHelp" option in Extra/Permanent settings.
You can select parts of the text with the mouse or the cursor and press F1 to dislpay a help page for the selected topic. If the desired topic contains of only one word, you can doubleclick it while holding down the Strg-Key to open the accompanying help page.
To get back to the previous page, just press the Backspace-Key.


::BrandingText
This command is not supported by NSISplus; just leave the original text alone - at least as a consideration for the great tool and its freeware status.


::Functions
This folder contains all the functions defined in the current project;
Special NSIS function names that are currently not used in this project are displayed grey.


::Function .onInit
This callback will be called when the installer is nearly finished initializing. If the '.onInit' function calls Abort, the installer will quit instantly. 

Here are two examples of how this might be used:
  Function .onInit
    MessageBox MB_YESNO "This will install. Continue?" IDYES NoAbort
      Abort ; causes installer to quit.
    NoAbort:
  FunctionEnd

or:
  Function .onInit
    ReadINIStr $INSTDIR $WINDIR\wincmd.ini Configuration InstallDir
    StrCmp $INSTDIR "" 0 NoAbort
      MessageBox MB_OK "Windows Commander not found. Unable to get install path."
      Abort ; causes installer to quit.
    NoAbort:
  FunctionEnd


::Function .onUserAbort
This callback is called when the user hits the 'cancel' button, and the install hasn't already failed. If this function calls Abort, the install will not be aborted. 

Example:
  Function .onUserAbort
    MessageBox MB_YESNO "Abort install?" IDYES NoCancelAbort
      Abort ; causes installer to not quit.
    NoCancelAbort:
  FunctionEnd


::Function .onInstSuccess
This callback is called when the install was successful, right before the install window closes (which may be after the user clicks 'Close' if AutoCloseWindow is set to false). 

Example:
  Function .onInstSuccess
    MessageBox MB_YESNO "Congrats, it worked. View readme?" IDNO NoReadme
      Exec notepad.exe ; view readme or whatever, if you want.
    NoReadme:
  FunctionEnd


::Function .onInstFailed
This callback is called when the user hits the 'cancel' button after the install has failed (if it could not extract a file, or the install script used the Abort command). 

Example:
  Function .onInstFailed
    MessageBox MB_OK "Better luck next time."  
  FunctionEnd


::Function .onVerifyInstDir
This callback enables control over whether or not an installation path is valid for your installer. This code will be called every time the user changes the install directory, so it shouldn't do anything crazy with MessageBox or the likes. If this function calls Abort, the installation path in $INSTDIR is deemed invalid. 

Example:
  Function .onVerifyInstDir
    IfFileExists $INSTDIR\Winamp.exe PathGood
      Abort ; if $INSTDIR is not a winamp directory, don't let us install there
    PathGood
  FunctionEnd


::Function .onNextPage
Called when the user selects to go from one page to the next. Also called when the first page is shown (after .onInit). Call Abort from this callback in order to make the installer stay on the current page (or to make it move relative to the current page - Abort 0 means to stay put, Abort 1 means to go to the next page, Abort 2 means to go to the following page, Abort -1 means to go back a page, and so on). To figure out which page you are on, you can just keep a counter and increment it on .onNextPage, and decrement it on .onPrevPage. Note that if the directory selection page is disabled, .onNextPage and .onPrevPage are still called for it.
Example use of .onNextPage/.onPrevPage/.onInit:
Function .onInit
  StrCpy $9 0 ; we start on page 0
FunctionEnd

Function .onNextPage
  StrCmp $9 1 "" noabort
    MessageBox MB_YESNO "advance to the second page?" IDYES noabort
      Abort
  noabort:
    IntOp $9 $9 + 1
FunctionEnd

Function .onPrevPage
  StrCmp $9 2 "" noabort
    MessageBox MB_YESNO "go back to the first page?" IDYES noabort
      Abort
  noabort:
    IntOp $9 $9 - 1
FunctionEnd


::Function .onPrevPage
Called when the user selects to go from one page to the previous.
Call Abort from this callback in order to make the installer stay on the current page (or pass an integer parameter to Abort to specify how many pages to move: Abort 1 means to go back one page, Abort 2 means to go back two pages, Abort -1 means to go forward a page, and so on).
See "Function .onNextPage" for more information. 


::Function un.onInit
This callback will be called when the uninstaller is nearly finished initializing. If the 'un.onInit' function calls Abort, the uninstaller will quit instantly. Note that this function can verify and/or modify $INSTDIR if necessary.

Here are two examples of how this might be used:
  Function un.onInit
    MessageBox MB_YESNO "This will uninstall. Continue?" IDYES NoAbort
      Abort ; causes uninstaller to quit.
    NoAbort:
  FunctionEnd

or:
  Function un.onInit
    IfFileExists $INSTDIR\myfile.exe found
      Messagebox MB_OK "Uninstall path incorrect"
      Abort
    found:
  FunctionEnd


::Function un.onUserAbort
This callback is called when the user hits the 'cancel' button and the uninstall hasn't already failed. If this function calls Abort, the install will not be aborted. 

Example:
  Function un.onUserAbort
    MessageBox MB_YESNO "Abort uninstall?" IDYES NoCancelAbort
      Abort ; causes uninstaller to not quit.
    NoCancelAbort:
  FunctionEnd


::Function un.onUnInstSuccess
This callback is called when the uninstall was successful, right before the install window closes (which may be after the user clicks 'Close' if AutoCloseWindow is set to false). 

Example:
  Function un.onUninstSuccess
    MessageBox MB_OK "Congrats, it's gone."
  FunctionEnd



::Function un.onUnInstFailed
This callback is called when the user hits the 'cancel' button after the uninstall has failed (if it used the Abort command or otherwise failed). 

Example:
  Function un.onUninstFailed
    MessageBox MB_OK "Better luck next time."  
  FunctionEnd


::Function un.onNextPage
Called when the user selects 'Uninstall' or 'Close' from the uninstaller.
Call Abort from this callback in order to make the uninstaller stay on the current page. 
