updated documentation: new system for DLL/TLB library setup, useful script code, history, credits, intro, tutorial

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3602 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
joostverburg 2004-08-06 22:06:27 +00:00
parent 4e4b0e8420
commit 7615a25883
9 changed files with 434 additions and 403 deletions

View file

@ -1,27 +1,39 @@
bin\halibut.exe chm_config.but intro.but tutorial.but usage.but script.but var.but labels.but jumps.but pages.but sections.but usection.but functions.but callback.but attributes.but compilerflags.but basic.but registry.but generalpurpose.but flowcontrol.but file.but uninstall.but misc.but string.but stack.but int.but reboot.but log.but sec.but ui.but langs.but plugin.but silent.but compiler.but defines.but modernui.but usefulfunc.but usefulinfos.but history.but credits.but license.but
@echo on
bin\halibut.exe config.but intro.but tutorial.but usage.but script.but var.but labels.but jumps.but pages.but sections.but usection.but functions.but callback.but attributes.but compilerflags.but basic.but registry.but generalpurpose.but flowcontrol.but file.but uninstall.but misc.but string.but stack.but int.but reboot.but log.but sec.but ui.but langs.but plugin.but silent.but compiler.but defines.but modernui.but library.but usefulfunc.but usefulinfos.but history.but credits.but license.but
@echo off
copy Contents.html index.html > nul
copy index.html IndexPage.html > nul
if "x%OS%x" == "xWindows_NTx" goto nt
copy *.html .. > nul
goto done
:nt
for %%A in (*.html) do (fc "%%A" "..\%%~nxA" || copy "%%A" ..) > nul
:done
del *.html > nul
@echo on
bin\halibut.exe chm_config.but intro.but tutorial.but usage.but script.but var.but labels.but jumps.but pages.but sections.but usection.but functions.but callback.but attributes.but compilerflags.but basic.but registry.but generalpurpose.but flowcontrol.but file.but uninstall.but misc.but string.but stack.but int.but reboot.but log.but sec.but ui.but langs.but plugin.but silent.but compiler.but defines.but modernui.but library.but usefulfunc.but usefulinfos.but history.but credits.but license.but
@echo off
copy Contents.html IndexPage.html
copy ..\*.css .
hhc nsis.hhp
del /F *.html *.hhc *.hhk *.css
if not "x%OS%x" == "xWindows_NTx" goto CHMCopy
fc /B nsis.chm ..\..\nsis.chm > nul
if %errorlevel% == 0 goto SkipCHMCopy
:CHMCopy
copy nsis.chm ..\..\
:SkipCHMCopy
del nsis.chm
@echo on
bin\halibut.exe config.but intro.but tutorial.but usage.but script.but var.but labels.but jumps.but pages.but sections.but usection.but functions.but callback.but attributes.but compilerflags.but basic.but registry.but generalpurpose.but flowcontrol.but file.but uninstall.but misc.but string.but stack.but int.but reboot.but log.but sec.but ui.but langs.but plugin.but silent.but compiler.but defines.but modernui.but usefulfunc.but usefulinfos.but history.but credits.but license.but
@echo off
copy Contents.html index.html > nul
copy index.html IndexPage.html > nul
if "x%OS%x" == "xWindows_NTx" goto nt
copy *.html .. > nul
goto done
:nt
for %%A in (*.html) do (fc "%%A" "..\%%~nxA" || copy "%%A" ..) > nul
:done
del *.html > nul
del nsis.chm

View file

@ -26,13 +26,17 @@
\b Modern User Interface
\b NSIS website
\b NSIS Menu
\b System for DLL/TLB library setup
\b NSIS Update for NSIS distribution (original version by Nathan Purciful)
\e{Robert Rainwater}
\b MakeNSISw
\b MakeNSISW
\b New documentation format
@ -62,6 +66,8 @@
\b InstallOptions improvements
\H{contributors} Contributors
\e{nnop@newmail.ru}
\e{Ryan Geiss}
@ -96,11 +102,11 @@
Arabic - \e{asdfuae, Rami Kattan}
Bulgarian - \e{Asparouh Kalyandjiev}
Bulgarian - \e{Asparouh Kalyandjiev, Plamen Penkov}
Catalan - \e{falanko}
Croatian - \e{Vedran "RIV@NVX" Miletic, Igor Ostriz}
Croatian - \e{Igor Ostriz, Vedran "RIV@NVX" Miletic}
Czech - \e{T.V. Zuggy, SELiCE}
@ -132,6 +138,8 @@ Korean - \e{dTomoyo, linak, koder}
Lithuanian - \e{NorCis, Vytautas Krivickas, Danielius Scepanskis}
Luxembourgish - \e{Jo Hoeser}
Macedonian - \e{Sasko Zdravkin}
Norwegian - \e{Jonas Christoffer Lindstrøm, Jan Ivar Beddari}
@ -140,7 +148,7 @@ Polish - \e{Piotr Murawski, Rafa
Portuguese - \e{DragonSoull, Dre', Ramon}
Portuguese Brasil - \e{Layout do Brasil, Diego Marcos}
Portuguese Brasil - \e{Layout do Brasil, deguix}
Romanian - \e{Sorin Sbarnea, Cristian Pirvu, George Radu}
@ -162,7 +170,7 @@ Traditional & Simplified Chinese - \e{Kii Ali}
Turkish - \e{Bertan Kodamanoglu, Çagatay Dilsiz, Fatih BOY}
Ukrainian - \e{Yuri Holubow - Nash-Soft}
Ukrainian - \e{Yuri Holubow, Nash-Soft}
\H{writers} Writers

View file

@ -6,19 +6,37 @@
\b See \R{compiling_infos}{Compiling NSIS Sources} for information about compiling makensis on POSIX platforms
\b NSIS doesn't create installers for Linux, it can only compile installers for Windows on Linux
\b NSIS doesn't create installers for Linux/Mac OS X etc., but you can compile Window installers on these platforms
\b UpgradeDLL is still provided in UpgradeDLL.nsh for backwards compatibility
\S1{v2.01-cl} Changelog
\b makensis compiles on POSIX platforms (Linux, *BSD, Mac OS X, etc.)
\S2{} Major Changes
\b \L{../Contrib/System/System.html}{System}: New, hopefully more informative, documentation; fixed some bugs
\b Compiler (makensis) supports POSIX platforms (Linux, *BSD, Mac OS X, etc.)
\b Language files fixes and improvements
\b \R{library}{New system} for DLL/TLB library setup
\S2{} New/Changed Commands
\b Added \R{abgfont}{BGFont} that allows setting the background text font
\b Added SW_HIDE to \R{execshell}{ExecShell}'s accepted show modes
\S2{} Minor Changes
\b LZMA exehead is now 34KB and should also decompress faster
\b Windows 95 (OSR2)/98/ME no longer see drive free space capped to 2GB
\b LZMA exehead is now 34kb and should also decompress faster
\b \L{../Contrib/Modern UI/Readme.html}{Modern User Interface}: New orange theme by MoNKi
\b \L{../Include/StrFunc.txt}{StrFunc}: Added support for uninstaller, added StrCase, some fixes
\b The plug-ins folder is properly removed when the system is rebooted
\b \R{setoutpath}{SetOutPath} "-" works again
\b Fixed a bug which made plug-ins that didn't have lower case extension not be found
@ -28,30 +46,26 @@
\b makensis shows meaningful errors for compression errors instead of just magic numbers
\b Added SW_HIDE to \R{execshell}{ExecShell}'s accepted show modes
\b Fixed a bug with \R{aallowrootdirinstall}{AllowRootDirInstall} used along with \R{ainstalldirregkey}{InstallDirRegKey} that caused the directory in the registry to be ignored
\b \L{../Contrib/Modern UI/Readme.html}{Modern User Interface}: New orange theme by MoNKi
\b \R{upgradedll}{UpgradeDLL}: rundll32 not always in $SYSDIR
\b \L{../Contrib/InstallOptions/Readme.html}{InstallOptions}: Fixed a bug which prevented enabling the next button from the leave function of InstallOptions pages, bitmaps are now automatically centered, fixed a rare freeze
\b \L{../Include/StrFunc.txt}{StrFunc}: Added support for uninstaller, added StrCase, some fixes
\b \L{../Contrib/nsExec/nsExec.txt}{nsExec}: Always create a valid input handle, fixed a problem when called from a path with spaces
\b \R{setoutpath}{SetOutPath} "-" works again
\b Added \R{abgfont}{BGFont} that allows setting the background text font
\b \R{file}{File} paths relative to the root folder work again
\b Made Times New Roman default font for the background text because it should always have support for the locale's language
\b Zip2Exe 0.32: Fixed codepage problems
\b Language file fixes and improvements
\S2{} Utilities and Plug-ins
\b \L{../Contrib/System/System.html}{System}: New, hopefully more informative, documentation; fixed some bugs
\b \L{../Contrib/Banner/Readme.txt}{Banner}: Added getWindow to allow greater control over the banner window
\b \L{../Contrib/InstallOptions/Readme.html}{InstallOptions 2.41}: Bitmaps are now automatically centered, fixed a bug which prevented enabling the next button from the leave function of InstallOptions pages, fixed a rare freeze
\b Zip2Exe 0.32: Fixed codepage problems
\b \L{../Contrib/nsExec/nsExec.txt}{nsExec}: Always create a valid input handle, fixed a problem when called from a path with spaces
\H{v2.0} 2.0
Released on February 7th, 2004
@ -98,9 +112,9 @@ Released on February 7th, 2004
\b New and improved utilities: \L{../Contrib/Makensisw/Readme.txt}{MakeNSISw}, NSIS Menu (NSIS.exe), NSIS Update (Bin\\NSIS Update.exe) and zip2exe (Bin\\zip2exe.exe)
\b New commands: \R{addplugindir}{!AddPluginDir}, \R{echo}{!echo}, \R{ifmacrodef}{!ifmacrodef}, \R{ifmacrondef}{!ifmacrondef}, \R{verbose}{!verbose}, \R{aaddbrandingimage}{AddBrandingImage}, \R{asetallowskipfiles}{AllowSkipFiles}, \R{achangeui}{ChangeUI}, \R{acheckbitmap}{CheckBitmap}, \R{createfont}{CreateFont}, \R{adirvar}{DirVar}, \R{adirverify}{DirVerify}, \R{enablewindow}{EnableWindow}, \R{afilebufsize}{FileBufSize}, \R{flushini}{FlushINI}, \R{sgetcurinsttype}{GetCurInstType}, \R{getdlgitem}{GetDlgItem}, \R{getinstdirerror}{GetInstDirError}, \R{ifabort}{IfAbort}, \R{ifsilent}{IfSilent}, \R{initpluginsdir}{InitPluginsDir}, \R{sinsttypegettext}{InstTypeGetText}, \R{sinsttypesettext}{InstTypeSetText}, \R{langstring}{LangString}, \R{alicensebkcolor}{LicenseBkColor}, \R{alicenseforceselection}{LicenseForceSelection}, \R{licenselangstring}{LicenseLangString}, \R{loadlanguagefile}{LoadLanguageFile}, LockWindow, \R{page}{Page}, \R{pageex}{PageEx}, \R{reservefile}{ReserveFile}, \R{sectiongetinsttypes}{SectionGetInstTypes}, \R{ssectiongetsize}{SectionGetSize}, \R{sectionsetinsttypes}{SectionSetInstTypes}, \R{ssectionsetsize}{SectionSetSize}, \R{setbrandingimage}{SetBrandingImage}, SetCompressionLevel, \R{asetcompressor}{SetCompressor}, \R{asetcompressordictsize}{SetCompressorDictSize}, \R{setctlcolors}{SetCtlColors}, \R{ssetcurinsttype}{SetCurInstType}, \R{setpluginunload}{SetPluginUnload}, \R{setsilent}{SetSilent}, \R{showwindow}{ShowWindow}, \R{ssubsection}{SubSection}, \R{ssubsectionend}{SubSectionEnd}, \R{var}{Var}, \R{viaddversionkey}{VIAddVersionKey}, \R{viproductversion}{VIProductVersion} and \R{axpstyle}{XPStyle}
\b New commands: \R{addplugindir}{!addplugindir}, \R{echo}{!echo}, \R{ifmacrodef}{!ifmacrodef}, \R{ifmacrondef}{!ifmacrondef}, \R{verbose}{!verbose}, \R{aaddbrandingimage}{AddBrandingImage}, \R{asetallowskipfiles}{AllowSkipFiles}, \R{achangeui}{ChangeUI}, \R{acheckbitmap}{CheckBitmap}, \R{createfont}{CreateFont}, \R{adirvar}{DirVar}, \R{adirverify}{DirVerify}, \R{enablewindow}{EnableWindow}, \R{afilebufsize}{FileBufSize}, \R{flushini}{FlushINI}, \R{sgetcurinsttype}{GetCurInstType}, \R{getdlgitem}{GetDlgItem}, \R{getinstdirerror}{GetInstDirError}, \R{ifabort}{IfAbort}, \R{ifsilent}{IfSilent}, \R{initpluginsdir}{InitPluginsDir}, \R{sinsttypegettext}{InstTypeGetText}, \R{sinsttypesettext}{InstTypeSetText}, \R{langstring}{LangString}, \R{alicensebkcolor}{LicenseBkColor}, \R{alicenseforceselection}{LicenseForceSelection}, \R{licenselangstring}{LicenseLangString}, \R{loadlanguagefile}{LoadLanguageFile}, LockWindow, \R{page}{Page}, \R{pageex}{PageEx}, \R{reservefile}{ReserveFile}, \R{sectiongetinsttypes}{SectionGetInstTypes}, \R{ssectiongetsize}{SectionGetSize}, \R{sectionsetinsttypes}{SectionSetInstTypes}, \R{ssectionsetsize}{SectionSetSize}, \R{setbrandingimage}{SetBrandingImage}, SetCompressionLevel, \R{asetcompressor}{SetCompressor}, \R{asetcompressordictsize}{SetCompressorDictSize}, \R{setctlcolors}{SetCtlColors}, \R{ssetcurinsttype}{SetCurInstType}, \R{setpluginunload}{SetPluginUnload}, \R{setsilent}{SetSilent}, \R{showwindow}{ShowWindow}, \R{ssubsection}{SubSection}, \R{ssubsectionend}{SubSectionEnd}, \R{var}{Var}, \R{viaddversionkey}{VIAddVersionKey}, \R{viproductversion}{VIProductVersion} and \R{axpstyle}{XPStyle}
\b Removed commands: DisabledBitmap, EnabledBitmap and SectionDivider
\b Removed commands: DirShow, DisabledBitmap, EnabledBitmap and SectionDivider
\b All this and a smaller overhead! =)
@ -274,7 +288,7 @@ Released on November 19th, 2003
\b The icons folder has been renamed to Graphics and was reorganized. If you were using any files from Contrib\\Icons in your script, you should update it to point to the new image or icon path.
\b \R{upgradedll}{UpgradeDLL} has been changed, it's \e{highly recommend} that you include the new version in your script using \c{!include "UpgradeDLL.nsh"} instead of the old one.
\b UpgradeDLL has been changed, it's \e{highly recommend} that you include the new version in your script using \c{!include "UpgradeDLL.nsh"} instead of the old one.
\S1{v2.0b4-cl} Changelog
@ -288,36 +302,20 @@ Released on November 19th, 2003
\b Improved large files handling (way lower requirements to compile a 2GB installer now)
\b Added \R{ifsilent}{IfSilent} and \R{setsilent}{SetSilent} to allow better /S interaction
\b Full support for RTL languages, including support for LTR and RTL languages in one installer
\b \L{../Contrib/Modern UI/Readme.html}{Modern UI 1.67}: New system & syntax for pages, settings (support for multiple pages of the same type, page specific settings, more customization options etc.), Welcome/Finish pages for uninstaller, \R{alicenseforceselection}{LicenseForceSelection} support, new options for Finish page / language selection dialog, fixes, more
\b Extraction progress
\b Better installation directory verification
\b Fixed all known problems with temporary files and directoroes
\b No more unprocessed strings, variables can be used everywhere
\b Leave function for custom \R{pages}{pages}: Input on InstallOptions pages can be validated using script code
\b Better ClearType support
\b No more flickering
\b Interface improvements: Better ClearType support, no more flickering
\b \R{onmouseoversection}{OnMouseOver text} is only displayed when mouse over section
\b RO sections can now be in \R{ainsttype}{InstTypes} too (defaults to old behavior)
\b Improved \R{aaddbrandingimage}{AddBrandingImage}: doesn't depend on the UI, can set image on the bottom and on the right, support for custom padding value
\b Increased limit of InstTypes to 32
\b Improved macros & functions: \R{upgradedll}{UpgradeDLL}, GetParent, GetParameters. Using the new versions is recommended.
\b NLF language files (v6): language specific fonts, RTL and more strings
\b Inner LangStrings can be used in the script
@ -326,18 +324,6 @@ Released on November 19th, 2003
\b LangStrings are no longer installer/uninstaller specific (no un.)
\b Fixed SetOutPath not setting current directory if the directory didn't exist before
\b Components tree: fixed problems with sub-sections with RO sections as children, SF_EXPAND now refreshes the components tree and added SF_PSELECTED for partially selected sub-sections
\b Documentation fixes
\b Minor bug fixes
\b Code clean-ups and some more comments
\b More...
\S2{} New/Changed Commands
\b Added \R{pageex}{PageEx}, \R{pagecallbacks}{PageCallbacks} and \R{adirvar}{DirVar} - it's now a lot easier to add the same page type twice
@ -354,6 +340,8 @@ Released on November 19th, 2003
\b Replaced SetBkColor with \R{setctlcolors}{SetCtlColors} which can set text color too
\b Added \R{ifsilent}{IfSilent} and \R{setsilent}{SetSilent} to allow better /S interaction
\b Added support for standard predefines: $\{__DATE__\}, $\{__TIME__\}, $\{__TIMESTAMP__\}, $\{__FILE__\}, $\{__LINE__\}
\b Added ifdiff and lastusd for \R{asetoverwrite}{SetOverwrite}
@ -368,6 +356,32 @@ Released on November 19th, 2003
\b Added base_dir for \R{gettempfilename}{GetTempFileName}
\S2{} Minor Changes
\b RO sections can now be in \R{ainsttype}{InstTypes} too (defaults to old behavior)
\b Increased limit of InstTypes to 32
\b Improved macros & functions: UpgradeDLL, GetParent, GetParameters. Using the new versions is recommended.
\b Fixed SetOutPath not setting current directory if the directory didn't exist before
\b Components tree: fixed problems with sub-sections with RO sections as children, SF_EXPAND now refreshes the components tree and added SF_PSELECTED for partially selected sub-sections
\b Improved \R{aaddbrandingimage}{AddBrandingImage}: doesn't depend on the UI, can set image on the bottom and on the right, support for custom padding value
\b Better installation directory verification
\b Fixed all known problems with temporary files and directories
\b Documentation fixes
\b Minor bug fixes
\b Code clean-ups and some more comments
\b More...
\S2{} Utilities and Plug-ins
\b \L{../Contrib/Makensisw/Readme.txt}{MakeNSISW 2.0}: UI to define symbols, easy access to recent scripts, toolbar and more
@ -812,4 +826,4 @@ Released on May 22nd, 2002
\H{cl-older} Older Versions
\W{http://nsis.sourceforge.net/download/nsis_1/}{NSIS 1.x version history}
\W{http://nsis.sourceforge.net/download/nsis1/}{NSIS 1.x version history}

View file

@ -1,26 +1,70 @@
\C{intro} Introduction to NSIS
\B{intro-about} About NSIS
\H{intro-about} About NSIS
NSIS, which stands for "Nullsoft Scriptable Installation System", is a free scriptable win32 installer/uninstaller system that doesn't suck and isn't huge. It was originally created by Nullsoft to distribute Winamp and its plug-ins, but is now a system used to distribute hundreds of applications.
An installer is the first experience of a user with your application.
Slow or unsuccesful software installations are the most irritating computer problems.
A quick and user friendly installer is therefore an essential part of your software product.
NSIS creates installers that are capable of installing, uninstalling, setting system settings, extracting files, etc. Pretty much anything. Because it's based on script files, you can fully control every part of your installers. The script language support variables, functions, string manipulation, just like a normal programming language - but designed for the creation of installers.
NSIS (Nullsoft Scriptable Install System) is a tool that allows programmers to create such installers for Windows.
It is released under an open source license and is \R{license}{completely free for any use}.
Even with all these features, NSIS is still the smallest installer system available. With the default options, it has an overhead of only 34 KB. NSIS installers don't bother decompressing themselves three different times, telling the user to "please wait". They get to the point and get the job done.
NSIS creates installers that are capable of installing, uninstalling, setting system settings, extracting files, etc.
Because it's based on script files, you can fully control every part of your installers.
The script language support variables, functions, string manipulation, just like a normal programming language - but designed for the creation of installers.
Even with all these features, NSIS is still the smallest installer system available. With the default options, it has an overhead of only 34 KB.
NSIS is released under an open source license (it is actually the zlib/libpng license, which is approved by opensource.org). What does this mean? It means that if you want to add the functionality you need to NSIS, you can. It means if you want to make your own custom version of NSIS (or some product that includes NSIS), and sell it, you can. Or if you just want to distribute your software using NSIS, you sure as hell can. NSIS 2 is now being developed by a team of open source developers.
\H{intro-features} Main Features
The result of all of this is an installation system that lets you compile nice little scripts into tiny installers. Many features are supported, and the whole thing just works pretty damn well (at least, we think).
\\<b\\>Small overhead size\\</b\\>
\B{intro-features} Main Features
NSIS is created to be small, fast and and efficient. While other installers often add hundreds of kilobytes or several megeabytes to your installer data, a full featured NSIS installer has an overhead of only 34 KB.
Here's a short list of some of NSIS' features:
\\<b\\>Compatible with all major Windows versions\\</b\\>
\b SuperPiMP\\&trade; technology (so advanced, so amazing, we won't even tell you what it is)
You can create a single installer that is compatible with Windows 95, Windows 98, Windows ME, Windows NT, Windows 2000, Windows XP and Windows Server 2003.
\\<b\\>Unique compression methods\\</b\\>
You can choose between three different integrated compression method (ZLib, BZip2, LZMA). The new LZMA compression gives better results than any other common compression method. You don't have to use large self-extracting archive modules or other applications. The compression support is included in the 34 KB overhead.
\\<b\\>Script based\\</b\\>
Unlike other systems that can only generate installers based on a list of files and registry keys, NSIS has a powerful scripting language. This script language is designed for installers and has command that help you to perform many installation tasks. You can easily add custom logic and handle different upgrades, version checks and more.
\\<b\\>Multiple languages in one installer\\</b\\>
One installer can support multiple interface languages. More than 40 translations are already included, but you can also create your own language files. RTL (right-to-left) languages such as Arabic and Hebrew are fully supported.
\\<b\\>Many features and checks for the target system\\</b\\>
The script langauge provides commands you can use on the target system. From simple features like folder creation and registry editing to text/binary file modification, modification of environment variables and system reboots. Using provided plug-ins you can even use Windows API.
\\<b\\>Custom dialogs and interfaces\\</b\\>
You can create custom wizard pages to get user input or integrate configuration options. NSIS includes a classic and modern wizard interface, but it is even possible to create a own custom interface.
\\<b\\>Plug-in system\\</b\\>
NSIS can be extended with plug-in that can communicate with the installer. They can be written in C, C++, Delphi or another language and can be used to perform installation tasks or extend the installer interface. You can use the plug-in with a single line of script code. Plug-ins can also be compressed like other installation data and will only be included when you are using the provided features.
\\<b\\>Support for web installation, file patching\\</b\\>
The NSIS distribution includes a set of plug-ins that allow you to download files from the internet, make internet connections, patch existing files and more.
\\<b\\>Project integration, different releases and automatic builds\\</b\\>
The NSIS compiler features a powerful preprocessor. This allows you to easily integrate multiple projects into a single installer or automatically generate installer builds. You can also generate different releases such a lite and full version.
\\<b\\>Easy and human readable file formats\\</b\\>
The NSIS script format and the format used for interface dialogs are easy, documented and human readable, so you can edit your files with your favorite editor. This also makes automatic script generation possible.
\H{intro-featurelist} Feature List
\b Generates self contained executable installers
\b Support for ZLib, BZip2 and LZMA data compression (files can be compressed individually or together)
\b Support for ZLIB, BZIP2 and LZMA data compression (files can be compressed individually or together)
\b Uninstall support (installer can generate an uninstaller)

247
Docs/src/library.but Normal file
View file

@ -0,0 +1,247 @@
\A{library} DLL/TLB Library Setup
\H{library_intro} Introduction
NSIS 2.01 features a new system for the installation and uninstallation of dynamic link libraries (DLL) and type libraries (TLB).
Using this new system you can handle the complete setup with one single line of code:
\b File copying
\b File copying on reboot
\b Version checks
\b Registration and unregistration
\b Registration and unregistration on reboot
\b Shared DLL counting
\b Windows File Protection checks
The macros are stored in the header file Library.nsh, which should be included in scripts using this system:
\c !include Library.nsh
Note that you can only compile scripts using this system on Windows systems. It is not possible to compile on Linux etc.
\H{library_install} Library Installation
\S1{} Introduction
The InstallLib macro allows you to install a library.
To ask the user for a reboot if required, use the Modern UI with a Finish page or use \R{IfRebootFlag}{IfRebootFlag} and make your own page or message box.
\S1{} Parameters
\c libtype shared protection localfile destfile tempbasedir
\\<b\\>libtype\\</b\\>
The type of the library
DLL - Dynamic link library (DLL)\\<br\\>
REGDLL - DLL that has to be registered\\<br\\>
TLB - Type library or DLL that contains a type LIBRARY\\<br\\>
REGDLLTLB - DLL that has to be registered and contains a type library\\<br\\>
\\<b\\>shared\\</b\\>
Specify whether the library is shared with other applications
NOTSHARED - The library is not shared\\<br\\>
$VARNAME - Variable that is empty when the application is installed for the first time,
which is when the shared library count will be increased.\\<br\\>
\\<b\\>install\\</b\\>
Specify the installation method
REBOOT_PROTECTED
\b Upgrade the libary on reboot when in use (required for system files).
\b Upgrade the library if the file is not protected by Windows File Protection.
NOREBOOT_PROTECTED
\b Warns the user when the library is in use. The user will have to close applications using the library.
\b Upgrade the library if the file is not protected by Windows File Protection.
REBOOT_NOTPROTECTED
\b Upgrade the libary on reboot when in use (required for system files).
\b Upgrade the library without checking for Windows File Protection.
NOREBOOT_NOTPROTECTED
\b Warns the user when the library is in use. The user will have to close applications using the library.
\b Upgrade the library without checking for Windows File Protection.
\\<b\\>localfile\\</b\\>
Location of the library on the compiler system
\\<b\\>destfile\\</b\\>
Location to store the library on the user's system
\\<b\\>tempbasedir\\</b\\>
Directory on the user's system to store a temporary file when the system has to be rebooted.
For Windows 9x/ME support, this directory should be on the same volume as the destination file (destfile).
The Windows temp directory could be located on any volume, so you cannot use this directory.
\S1{} Notes
\b If you want to support Windows 9x/ME, you can only use short filenames (8.3).
\S1{} Example
\c ;Add code here that sets $ALREADY_INSTALLED to a non-zero value if the application is
\c ;already installed. For example:
\c
\c IfFileExists "$INSTDIR\MyApp.exe" 0 new_installation ;Replace MyApp.exe with your application filename
\c StrCpy $ALREADY_INSTALLED 1
\c new_installation:
\c
\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_NOTPROTECTED dllname.dll $SYSDIR\dllname.dll $SYSDIR
\H{library_uninstall} Library Uninstallation
\S1{} Introduction
The UnInstallLib macro allows you to uninstall a library.
\S1{} Parameters
\c libtype shared uninstall file
\\<b\\>libtype\\</b\\>
The type of the library
DLL - Dynamic link library (DLL)\\<br\\>
REGDLL - DLL that has to be registered\\<br\\>
TLB - Type library or DLL that contains a type LIBRARY\\<br\\>
REGDLLTLB - DLL that has to be registered and contains a type library\\<br\\>
\\<b\\>shared\\</b\\>
Specify whether the library is shared with other applications
NOTSHARED - The library is not shared\\<br\\>
SHARED - The library is shared and should be removed if the shared library count
indicates that the file is not in use anymore..\\<br\\>
\\<b\\>uninstall\\</b\\>
Specify the uninstallation method
NOREMOVE
\b The library should not be removed. You should use this option for common or important
system files such as the Visual Basic/C++/MFC runtimes.
REBOOT_PROTECTED
\b Remove the libary on reboot when in use (required for system files).
\b Remove the library if the file is not protected by Windows File Protection.
NOREBOOT_PROTECTED
\b Warns the user when the library is in use. The user will have to close applications using the library.
\b Remove the library if the file is not protected by Windows File Protection.
REBOOT_NOTPROTECTED
\b Remove the libary on reboot when in use (required for system files).
\b Remove the library without checking for Windows File Protection.
NOREBOOT_NOTPROTECTED
\b Warns the user when the library is in use. The user will have to close applications using the library.
\b Remove the library without checking for Windows File Protection.
\\<b\\>file\\</b\\>
Location of the library
\S1{} Example
\c !insertmacro UnInstallLib REGDLL SHARED REBOOT_NOTPROTECTED $SYSDIR\dllname.dll
\H{library_vb6} Visual Basic 6 Runtimes
Add this code to your script to install and uninstall the VB6 runtimes.
The correct version of the following files should be stored in your script folder
(or modify the paths to the local files if you want to use another folder):
\b msvbvm60.dll
\b oleaut32.dll
\b olepro32.dll
\b oleaut32.dll
\b comcat.dll
\b asycfilt.dll
\b stdole2.tlb
A \W{http://support.microsoft.com/default.aspx?scid=kb;en-us;290887}{Microsoft article} is available that explains you how to obatain these files.
To ask the user for a reboot if required, use the Modern UI with a Finish page or use \R{IfRebootFlag}{IfRebootFlag} and make your own page or message box.
\c !include Library.nsh
\c
\c Var ALREADY_INSTALLED
\c
\c Section "-Install VB6 runtimes"
\c
\c ;Add code here that sets $ALREADY_INSTALLED to a non-zero value if the application is already installed. For example:
\c
\c IfFileExists "$INSTDIR\MyApp.exe" 0 new_installation ;Replace MyApp.exe with your application filename
\c StrCpy $ALREADY_INSTALLED 1
\c new_installation:
\c
\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_NOTPROTECTED "msvbvm60.dll" "$SYSDIR\msvbvm60.dll" "$SYSDIR"
\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_PROTECTED "oleaut32.dll" "$SYSDIR\oleaut32.dll" "$SYSDIR"
\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_PROTECTED "olepro32.dll" "$SYSDIR\olepro32.dll" "$SYSDIR"
\c !insertmacro InstallLib REGDLL $ALREADY_INSTALLED REBOOT_PROTECTED "comcat.dll" "$SYSDIR\comcat.dll" "$SYSDIR"
\c !insertmacro InstallLib DLL $ALREADY_INSTALLED REBOOT_PROTECTED "asycfilt.dll" "$SYSDIR\asycfilt.dll" "$SYSDIR"
\c !insertmacro InstallLib TLB $ALREADY_INSTALLED REBOOT_PROTECTED "stdole2.tlb" "$SYSDIR\stdole2.tlb" "$SYSDIR"
\c
\c SectionEnd
\c
\c Section "-un.Uninstall VB6 runtimes"
\c
\c !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\msvbvm60.dll"
\c !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\oleaut32.dll"
\c !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\olepro32.dll"
\c !insertmacro UnInstallLib REGDLL SHARED NOREMOVE "$SYSDIR\comcat32.dll"
\c !insertmacro UnInstallLib DLL SHARED NOREMOVE "$SYSDIR\asycfilt.dll"
\c !insertmacro UnInstallLib TLB SHARED NOREMOVE "$SYSDIR\stdole2.tlb"
\c
\c SectionEnd
You can use similar code to install common VB6 ActiveX controls (such as the controls for Windows Common Controls).

View file

@ -140,7 +140,7 @@ Compiler commands will be executed on compile time on your computer. They can be
For more information about defines see \R{compdefines}{Conditional Compilation}.
Another common use is macros. Macros are used to insert code on compile time, depending on defines and using the values of the defines. An example of a macro is \R{upgradedll}{UpgradeDLL}, which you can use to upgrade a DLL file. The macro's commands are inserts at compile time. This allows you to write a general code only once and use it a lot of times but with a few changes. For example:
Another common use is macros. Macros are used to insert code on compile time, depending on defines and using the values of the defines. The macro's commands are inserts at compile time. This allows you to write a general code only once and use it a lot of times but with a few changes. For example:
\c !macro MyFunc UN
\c Function ${UN}MyFunc
@ -166,6 +166,8 @@ The compiler will check your script and give you warnings or an error. If an err
NSIS supports different compression methods, as explained \R{asetcompressor}{here}. ZLIB is the default compression method, which is fast and uses only a little bit of memory. LZMA is a good method for the creation of small installers for internet distribution. BZIP2 usually compresses better than ZLIB but not as good as LZMA, it is useful if you need lower memory usage or fast script compilation.
It it also possible to compile Windows installer on Linux, BSD or Mac OS X servers. See \R{compiling_infos}{Compiling NSIS Sources} for details.
\H{tutmodernui} Modern UI
A popular user interface for NSIS is the Modern User Interface, it has an interface like the wizards of recent Windows versions. The Modern UI is not only a customized resource file, it has a lots of new interface elements. It features a white header to describe the current step, a description area on the component page, a welcome page, a finish page that allows the user to run the application or reboot the system and more.
@ -186,7 +188,7 @@ Every plug-in's function has its own requirements when it comes to parameters, s
\c InstallOptions::dialog "$PLUGINSDIR\test.ini"
\c NSISdl::download http://download.nullsoft.com/winamp/client/winamp291_lite.exe $R0
The plug-ins that NSIS knows of are listed at the top of the output of the compiler. NSIS searches for plug-ins in the \L{../Plugins/}{Plugins folder} under your NSIS directory and lists all of their available functions. You can use \R{addplugindir}{!addPluginDir} to tell NSIS to search in other directories too.
The plug-ins that NSIS knows of are listed at the top of the output of the compiler. NSIS searches for plug-ins in the \L{../Plugins/}{Plugins folder} under your NSIS directory and lists all of their available functions. You can use \R{addplugindir}{!addplugindir} to tell NSIS to search in other directories too.
The NSIS distribution already included many plug-ins. \L{../Contrib/InstallOptions/Readme.html}{InstallOptions} is a popular plug-in that allows you to create custom pages, in combination with the NSIS Page commands (See \R{pages}{Pages}). The \L{../Contrib/StartMenu/Readme.txt}{Startmenu plug-in} provides a page that allows the user to choose a Start Menu folder. There are a lot of plug-ins for different purposes, have a look at the \L{../Contrib/}{Contrib folder} for help files and examples. You can find additional plug-ins on-line: \W{http://nsis.sf.net/archive/}{NSIS Archive}.

View file

@ -1,4 +1,4 @@
\A{usefulfunctions} Useful Functions
\A{usefulfunctions} Useful Scripts
\H{getparent} Get parent directory
@ -385,208 +385,6 @@
\c Exch $R0
\c FunctionEnd
\H{addshareddll} Add a shared DLL
\c ; AddSharedDLL
\c ;
\c ; Increments a shared DLLs reference count.
\c ; Use by passing one item on the stack (the full path of the DLL).
\c ;
\c ; Usage:
\c ; Push $SYSDIR\myDll.dll
\c ; Call AddSharedDLL
\c ;
\c
\c Function AddSharedDLL
\c Exch $R1
\c Push $R0
\c ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
\c IntOp $R0 $R0 + 1
\c WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0
\c Pop $R0
\c Pop $R1
\c FunctionEnd
\H{unremovesharedll} Remove a shared DLL
\c ; un.RemoveSharedDLL
\c ;
\c ; Decrements a shared DLLs reference count, and removes if necessary.
\c ; Use by passing one item on the stack (the full path of the DLL).
\c ; Note: for use in the main installer (not the uninstaller), rename the
\c ; function to RemoveSharedDLL.
\c ;
\c ; Usage:
\c ; Push $SYSDIR\myDll.dll
\c ; Call un.RemoveSharedDLL
\c ;
\c
\c Function un.RemoveSharedDLL
\c Exch $R1
\c Push $R0
\c ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
\c StrCmp $R0 "" remove
\c IntOp $R0 $R0 - 1
\c IntCmp $R0 0 rk rk uk
\c rk:
\c DeleteRegValue HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
\c goto Remove
\c uk:
\c WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0
\c Goto noremove
\c remove:
\c Delete /REBOOTOK $R1
\c noremove:
\c Pop $R0
\c Pop $R1
\c FunctionEnd
\H{upgradedll} Upgrade a DLL (macro)
There is also a copy of this macro in the Include folder, so you only have to include UpgradeDLL.nsh to use it.
\c ; Macro - Upgrade DLL File
\c ; Written by Joost Verburg
\c ; ------------------------
\c ;
\c ; Parameters:
\c ; LOCALFILE - Location of the new DLL file (on the compiler system)
\c ; DESTFILE - Location of the DLL file that should be upgraded (on the user's system)
\c ; TEMPBASEDIR - Directory on the user's system to store a temporary file when the system has
\c ; to be rebooted.
\c ; For Win9x support, this should be on the same volume as the DESTFILE!
\c ; The Windows temp directory could be located on any volume, so you cannot use
\c ; this directory.
\c ;
\c ; Define UPGRADEDLL_NOREGISTER if you want to upgrade a DLL that does not have to be registered.
\c ;
\c ; Note: If you want to support Win9x, you can only use short filenames (8.3).
\c ;
\c ; Example of usage:
\c ; !insertmacro UpgradeDLL "dllname.dll" "$SYSDIR\dllname.dll" "$SYSDIR"
\c ;
\c
\c !macro UpgradeDLL LOCALFILE DESTFILE TEMPBASEDIR
\c
\c Push $R0
\c Push $R1
\c Push $R2
\c Push $R3
\c Push $R4
\c Push $R5
\c
\c ;------------------------
\c ;Unique number for labels
\c
\c !define UPGRADEDLL_UNIQUE ${__LINE__}
\c
\c ;------------------------
\c ;Copy the parameters used on run-time to a variable
\c ;This allows the usage of variables as paramter
\c
\c StrCpy $R4 "${DESTFILE}"
\c StrCpy $R5 "${TEMPBASEDIR}"
\c
\c ;------------------------
\c ;Check file and version
\c
\c IfFileExists $R4 0 upgradedll.copy_${UPGRADEDLL_UNIQUE}
\c
\c ClearErrors
\c GetDLLVersionLocal "${LOCALFILE}" $R0 $R1
\c GetDLLVersion $R4 $R2 $R3
\c IfErrors upgradedll.upgrade_${UPGRADEDLL_UNIQUE}
\c
\c IntCmpU $R0 $R2 0 upgradedll.done_${UPGRADEDLL_UNIQUE} upgradedll.upgrade_${UPGRADEDLL_UNIQUE}
\c IntCmpU $R1 $R3 upgradedll.done_${UPGRADEDLL_UNIQUE} upgradedll.done_${UPGRADEDLL_UNIQUE} \
\c upgradedll.upgrade_${UPGRADEDLL_UNIQUE}
\c
\c ;------------------------
\c ;Let's upgrade the DLL!
\c
\c SetOverwrite try
\c
\c upgradedll.upgrade_${UPGRADEDLL_UNIQUE}:
\c !ifndef UPGRADEDLL_NOREGISTER
\c ;Unregister the DLL
\c UnRegDLL $R4
\c !endif
\c
\c ;------------------------
\c ;Try to copy the DLL directly
\c
\c ClearErrors
\c StrCpy $R0 $R4
\c Call :upgradedll.file_${UPGRADEDLL_UNIQUE}
\c IfErrors 0 upgradedll.noreboot_${UPGRADEDLL_UNIQUE}
\c
\c ;------------------------
\c ;DLL is in use. Copy it to a temp file and Rename it on reboot.
\c
\c GetTempFileName $R0 $R5
\c Call :upgradedll.file_${UPGRADEDLL_UNIQUE}
\c Rename /REBOOTOK $R0 $R4
\c
\c ;------------------------
\c ;Register the DLL on reboot
\c
\c !ifndef UPGRADEDLL_NOREGISTER
\c WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
\c "Register $R4" 'rundll32.exe "$R4",DllRegisterServer'
\c !endif
\c
\c Goto upgradedll.done_${UPGRADEDLL_UNIQUE}
\c
\c ;------------------------
\c ;DLL does not exist - just extract
\c
\c upgradedll.copy_${UPGRADEDLL_UNIQUE}:
\c StrCpy $R0 $R4
\c Call :upgradedll.file_${UPGRADEDLL_UNIQUE}
\c
\c ;------------------------
\c ;Register the DLL
\c
\c upgradedll.noreboot_${UPGRADEDLL_UNIQUE}:
\c !ifndef UPGRADEDLL_NOREGISTER
\c RegDLL $R4
\c !endif
\c
\c ;------------------------
\c ;Done
\c
\c upgradedll.done_${UPGRADEDLL_UNIQUE}:
\c
\c Pop $R5
\c Pop $R4
\c Pop $R3
\c Pop $R2
\c Pop $R1
\c Pop $R0
\c
\c ;------------------------
\c ;End
\c
\c Goto upgradedll.end_${UPGRADEDLL_UNIQUE}
\c
\c ;------------------------
\c ;Called to extract the DLL
\c
\c upgradedll.file_${UPGRADEDLL_UNIQUE}:
\c File /oname=$R0 "${LOCALFILE}"
\c Return
\c
\c upgradedll.end_${UPGRADEDLL_UNIQUE}:
\c
\c ;------------------------
\c ;Restore settings
\c
\c SetOverwrite lastused
\c
\c !undef UPGRADEDLL_UNIQUE
\c
\c !macroend
\H{connectinternet} Connect to the internet
\c ; ConnectInternet (uses Dialer plugin)
@ -624,6 +422,24 @@ There is also a copy of this macro in the Include folder, so you only have to in
\c
\c FunctionEnd
\H{installerfilename} Get Installer Filename
\c System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1'
\c ;$R0 will contain the installer filename
\H{multipleinstances} Prevent Multiple Instances
Put the following code in your \R{oninit}{.onInit function}:
\c System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e'
\c Pop $R0
\c
\c StrCmp $R0 0 +3
\c MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running."
\c Abort
'myMutex' should be replaced by a unique value.
\H{morefuncs} More
You can find more useful functions at \W{http://nsis.sourceforge.net/archive/}{the NSIS Archive}, \W{http://forums.winamp.com/forumdisplay.php?s=&forumid=65}{the NSIS forum} and \W{http://nsis.sourceforge.net/}{NSIS development page}.
You can find more useful scripts at \W{http://nsis.sourceforge.net/archive/}{the NSIS Archive}, \W{http://forums.winamp.com/forumdisplay.php?s=&forumid=65}{the NSIS forum} and \W{http://nsis.sourceforge.net/}{NSIS development page}.

View file

@ -80,102 +80,6 @@ Some of the following values will not be used by older Windows versions.
If both NoModify and NoRepair are set to 1, the button displays "Remove" instead of "Modify/Remove".
\H{usefulvb6_runtime} How to install the VB6 runtimes
The best way to install the VB6 runtimes is to use the \R{upgradedll}{UpgradeDLL macro} to upgrade the DLL files and the \R{addshareddll}{AddSharedDLL function} to increment the shared DLL count.
Use the Modern UI with a Finish page to ask for a reboot if required or use \R{IfRebootFlag}{IfRebootFlag} and make your own page or messagebox.
To get the VB6 runtime files, you can extract the files from vbrun60sp5.exe using any archiver that supports CAB compression or, if you have installed the latest version, copy the the files from the System folder. You need the following files:
Asycfilt.dll \\<br\\>
Comcat.dll \\<br\\>
Msvbvm60.dll \\<br\\>
Oleaut32.dll \\<br\\>
Olepro32.dll \\<br\\>
Stdole2.tlb \\<br\\>
During the uninstallation, use the un.DecrementSharedDLL function below to decrement the shared DLL count (never remove the files, because the shared DLL count is not reliable enough for such imporant files).
\c !include "UpgradeDLL.nsh"
\c
\c !define VBFILESDIR "C:\Windows\System" ;Location of VB6 runtime files
\c
\c Section "Install VB DLLs"
\c
\c !insertmacro UpgradeDLL ${VBFILESDIR}\Comcat.dll $SYSDIR\Comcat.dll $SYSDIR
\c !insertmacro UpgradeDLL ${VBFILESDIR}\Msvbvm60.dll $SYSDIR\Msvbvm60.dll $SYSDIR
\c !insertmacro UpgradeDLL ${VBFILESDIR}\Oleaut32.dll $SYSDIR\Oleaut32.dll $SYSDIR
\c !insertmacro UpgradeDLL ${VBFILESDIR}\Olepro32.dll $SYSDIR\Olepro32.dll $SYSDIR
\c
\c !define UPGRADEDLL_NOREGISTER
\c !insertmacro UpgradeDLL ${VBFILESDIR}\Asycfilt.dll $SYSDIR\Asycfilt.dll $SYSDIR
\c !insertmacro UpgradeDLL ${VBFILESDIR}\Stdole2.tlb $SYSDIR\Stdole2.tlb $SYSDIR
\c !undef UPGRADEDLL_NOREGISTER
\c
\c ;Only iease DLL count on new installation
\c ;Replace myprog.exe or use another detection method
\c IfFileExists $INSTDIR\myprog.exe skipAddSharedDLL
\c Push $SYSDIR\Asycfilt.dll
\c Call AddSharedDLL
\c Push $SYSDIR\Comcat.dll
\c Call AddSharedDLL
\c Push $SYSDIR\Msvbvm60.dll
\c Call AddSharedDLL
\c Push $SYSDIR\Oleaut32.dll
\c Call AddSharedDLL
\c Push $SYSDIR\Olepro32.dll
\c Call AddSharedDLL
\c Push $SYSDIR\Stdole2.tlb
\c Call AddSharedDLL
\c skipAddSharedDLL:
\c
\c SectionEnd
\c
\c Section "Uninstall"
\c
\c Push $SYSDIR\Asycfilt.dll
\c Call un.DecrementSharedDLL
\c Push $SYSDIR\Comcat.dll
\c Call un.DecrementSharedDLL
\c Push $SYSDIR\Msvbvm60.dll
\c Call un.DecrementSharedDLL
\c Push $SYSDIR\Oleaut32.dll
\c Call un.DecrementSharedDLL
\c Push $SYSDIR\Olepro32.dll
\c Call un.DecrementSharedDLL
\c Push $SYSDIR\Stdole2.tlb
\c Call un.DecrementSharedDLL
\c
\c SectionEnd
\c
\c Function AddSharedDLL
\c Exch $R1
\c Push $R0
\c ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
\c IntOp $R0 $R0 + 1
\c WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0
\c Pop $R0
\c Pop $R1
\c FunctionEnd
\c
\c Function un.DecrementSharedDLL
\c Exch $R1
\c Push $R0
\c ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
\c StrCmp $R0 "" done
\c IntOp $R0 $R0 - 1
\c IntCmp $R0 0 rk rk uk
\c rk:
\c DeleteRegValue HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
\c Goto done
\c uk:
\c WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0
\c done:
\c Pop $R0
\c Pop $R1
\c FunctionEnd
\H{useful_system_plugin} Calling an external DLL using the System.dll plugin
Some install processes are required to call functions contained inside third party DLLs. A prime example of this is when installing a Palm(TM) conduit.

View file

@ -216,7 +216,7 @@ The decimal HWND of the parent window.
The path to a temporary folder created upon the first usage of a plugin or a call to \R{initpluginsdir}{InitPluginsDir}. This folder is automatically deleted when the installer exits. This makes this folder the ideal folder to hold INI files for \L{../Contrib/InstallOptions/Readme.html}{InstallOptions}, bitmaps for the splash plugin, or any other file that a plugin needs to work.
\S1{varstrings} Variables Used in Strings
\S1{varstrings} Constants Used in Strings
\e{$$}
@ -233,19 +233,3 @@ Use to represent a newline (\\n).
\e{$\\t}
Use to represent a tab (\\t).
\e{$\{SYMBOL\}}
Where SYMBOL is the name of something globally defined, this will be replaced with the value of that symbol. The order of calling Symbols in the script is important.
\c Name "Test Program ${VERSION}"
\c !define VERSION "V.1.0"
This code will set the name of the installer to "Test Program $\{VERSION\}". The Same happens if the Symbol has not been defined.
\c !define VERSION "V.1.0"
\c Name "Test Program ${VERSION}"
This code sets the name of the installer to "Test Program V.1.0"
For more info, see \R{compdefines}{Conditional Compilation}.