NSIS
The top-level nsis key contains set of options instructing electron-builder on how it should build NSIS target (default target for Windows).
These options also applicable for Web installer, use top-level nsisWeb
key.
Unicode enabled by default. Large strings are supported (maximum string length of 8192 bytes instead of the default of 1024 bytes).
32 bit + 64 bit¶
If you build both ia32 and x64 arch (--x64 --ia32
), you in any case get one installer. Appropriate arch will be installed automatically.
The same applied to web installer (nsis-web
target).
Web Installer¶
To build web installer, set target to nsis-web
. Web Installer automatically detects OS architecture and downloads corresponding package file. So, user don’t need to guess what installer to download and in the same time you don’t bundle package files for all architectures in the one installer (as in case of default nsis
target). It doesn’t matter for common Electron application (due to superb LZMA compression, size difference is acceptable), but if your application is huge, Web Installer is a solution.
To customize web installer, use the top-level nsisWeb
key (not nsis
).
If for some reasons web installer cannot download (antivirus, offline):
- Download package file into the same directory where installer located. It will be detected automatically and used instead of downloading from the Internet. Please note — only original package file is allowed (checksum is checked).
- Specify any local package file using
--package-file=path_to_file
.
Custom NSIS script¶
Two options are available — include and script. script
allows you to provide completely different NSIS script. For most cases it is not required as you need only to customise some aspects, but still use well-tested and maintained default NSIS script. So, include
is recommended.
Keep in mind — if you customize NSIS script, you should always state about it in the issue reports. And don’t expect that your issue will be resolved.
- Add file
build/installer.nsh
. -
Define wanted macro to customise:
customHeader
,preInit
,customInit
,customUnInit
,customInstall
,customUnInstall
,customRemoveFiles
,customInstallMode
,customWelcomePage
,customUnWelcomePage
.Example
!macro customHeader !system "echo '' > ${BUILD_RESOURCES_DIR}/customHeader" !macroend !macro preInit ; This macro is inserted at the beginning of the NSIS .OnInit callback !system "echo '' > ${BUILD_RESOURCES_DIR}/preInit" !macroend !macro customInit !system "echo '' > ${BUILD_RESOURCES_DIR}/customInit" !macroend !macro customInstall !system "echo '' > ${BUILD_RESOURCES_DIR}/customInstall" !macroend !macro customInstallMode # set $isForceMachineInstall or $isForceCurrentInstall # to enforce one or the other modes. !macroend !macro customWelcomePage # Welcome Page is not added by default for installer. !insertMacro MUI_PAGE_WELCOME !macroend !macro customUnWelcomePage !define MUI_WELCOMEPAGE_TITLE "custom title for uninstaller welcome page" !define MUI_WELCOMEPAGE_TEXT "custom text for uninstaller welcome page $\r$\n more" !insertmacro MUI_UNPAGE_WELCOME !macroend
-
BUILD_RESOURCES_DIR
andPROJECT_DIR
are defined. build
is added asaddincludedir
(i.e. you don’t need to useBUILD_RESOURCES_DIR
to include files).build/x86-unicode
andbuild/x86-ansi
are added asaddplugindir
.- File associations macro
registerFileAssociations
andunregisterFileAssociations
are still defined. - All other electron-builder specific flags (e.g.
ONE_CLICK
) are still defined.
If you want to include additional resources for use during installation, such as scripts or additional installers, you can place them in the build
directory and include them with File
. For example, to include and run extramsi.msi
during installation, place it in the build
directory and use the following:
!macro customInstall
File /oname=$PLUGINSDIR\extramsi.msi "${BUILD_RESOURCES_DIR}\extramsi.msi"
ExecWait '"msiexec" /i "$PLUGINSDIR\extramsi.msi" /passive'
!macroend
Is there a way to call just when the app is installed (or uninstalled) manually and not on update?
Use ${isUpdated}
.
${ifNot} ${isUpdated}
# your code
${endIf}
GUID vs Application Name¶
Windows requires to use registry keys (e.g. INSTALL/UNINSTALL info). Squirrel.Windows simply uses application name as key. But it is not robust — Google can use key Google Chrome SxS, because it is a Google.
So, it is better to use GUID.
You are not forced to explicitly specify it — name-based UUID v5 will be generated from your appId or name.
It means that you should not change appId once your application in use (or name if appId
was not set). Application product name (title) or description can be safely changed.
You can explicitly set guid using option nsis.guid, but it is not recommended — consider using appId.
It is also important to set the Application User Model ID (AUMID) to the appId of the application, in order for notifications on Windows 8/8.1 to function and for Window 10 notifications to display the app icon within the notifications by default. The AUMID should be set within the Main process and before any BrowserWindows have been opened, it is normally the first piece of code executed: app.setAppUserModelId(appId)
Portable¶
To build portable app, set target to portable
(or pass --win portable
).
For portable app, following environment variables are available:
PORTABLE_EXECUTABLE_FILE
- path to the portable executable.PORTABLE_EXECUTABLE_DIR
- directory where the portable executable is located.PORTABLE_EXECUTABLE_APP_FILENAME
- sanitized app name to use in file paths.
Common Questions¶
How do change the default installation directory to custom?
It is very specific requirement. Do not do if you are not sure. Add custom macro:
!macro preInit
SetRegView 64
WriteRegExpandStr HKLM "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\MyApp"
WriteRegExpandStr HKCU "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\MyApp"
SetRegView 32
WriteRegExpandStr HKLM "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\MyApp"
WriteRegExpandStr HKCU "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\MyApp"
!macroend
Is it possible to made single installer that will allow configuring user/machine installation?
Yes, you need to switch to assisted installer (not default one-click).
package.json
"build": {
"nsis": {
"oneClick": false
}
}
nsis:
oneClick: false
Configuration¶
Electron-Builder / app-builder-lib / NsisOptions
Extends¶
Extended by¶
Properties¶
allowElevation?¶
readonly
optional
allowElevation:boolean
assisted installer only. Allow requesting for elevation. If false, user will have to restart installer with elevated permissions.
Default¶
true
allowToChangeInstallationDirectory?¶
readonly
optional
allowToChangeInstallationDirectory:boolean
assisted installer only. Whether to allow user to change installation directory.
Default¶
false
artifactName?¶
readonly
optional
artifactName:null
|string
The artifact file name template. Defaults to ${productName} Setup ${version}.${ext}
.
Overrides¶
TargetSpecificOptions
.artifactName
createDesktopShortcut?¶
readonly
optional
createDesktopShortcut:boolean
|"always"
Whether to create desktop shortcut. Set to always
if to recreate also on reinstall (even if removed by user).
Default¶
true
Inherited from¶
CommonWindowsInstallerConfiguration
.createDesktopShortcut
createStartMenuShortcut?¶
readonly
optional
createStartMenuShortcut:boolean
Whether to create start menu shortcut.
Default¶
true
Inherited from¶
CommonWindowsInstallerConfiguration
.createStartMenuShortcut
customNsisBinary?¶
readonly
optional
customNsisBinary:null
|CustomNsisBinary
Allows you to provide your own makensis
, such as one with support for debug logging via LogSet and LogText. (Logging also requires option debugLogging = true
)
Inherited from¶
CommonNsisOptions
.customNsisBinary
deleteAppDataOnUninstall?¶
readonly
optional
deleteAppDataOnUninstall:boolean
one-click installer only. Whether to delete app data on uninstall.
Default¶
false
displayLanguageSelector?¶
readonly
optional
displayLanguageSelector:boolean
Whether to display a language selection dialog. Not recommended (by default will be detected using OS language).
Default¶
false
guid?¶
readonly
optional
guid:null
|string
Inherited from¶
include?¶
readonly
optional
include:null
|string
The path to NSIS include script to customize installer. Defaults to build/installer.nsh
. See Custom NSIS script.
installerHeader?¶
readonly
optional
installerHeader:null
|string
assisted installer only. MUI_HEADERIMAGE
, relative to the build resources or to the project directory.
Default¶
build/installerHeader.bmp
installerHeaderIcon?¶
readonly
optional
installerHeaderIcon:null
|string
one-click installer only. The path to header icon (above the progress bar), relative to the build resources or to the project directory.
Defaults to build/installerHeaderIcon.ico
or application icon.
installerIcon?¶
readonly
optional
installerIcon:null
|string
The path to installer icon, relative to the build resources or to the project directory.
Defaults to build/installerIcon.ico
or application icon.
installerLanguages?¶
readonly
optional
installerLanguages:null
|string
|string
[]
The installer languages (e.g. en_US
, de_DE
). Change only if you understand what do you do and for what.
installerSidebar?¶
readonly
optional
installerSidebar:null
|string
assisted installer only. MUI_WELCOMEFINISHPAGE_BITMAP
, relative to the build resources or to the project directory.
Defaults to build/installerSidebar.bmp
or ${NSISDIR}\\Contrib\\Graphics\\Wizard\\nsis3-metro.bmp
. Image size 164 × 314 pixels.
language?¶
readonly
optional
language:null
|string
LCID Dec, defaults to 1033
(English - United States
).
license?¶
readonly
optional
license:null
|string
The path to EULA license file. Defaults to license.txt
or eula.txt
(or uppercase variants). In addition to txt
, rtf
and html
supported (don’t forget to use target="_blank"
for links).
Multiple license files in different languages are supported — use lang postfix (e.g. _de
, _ru
). For example, create files license_de.txt
and license_en.txt
in the build resources.
If OS language is german, license_de.txt
will be displayed. See map of language code to name.
Appropriate license file will be selected by user OS language.
menuCategory?¶
readonly
optional
menuCategory:string
|boolean
Whether to create submenu for start menu shortcut and program files directory. If true
, company name will be used. Or string value.
Default¶
false
Inherited from¶
CommonWindowsInstallerConfiguration
.menuCategory
multiLanguageInstaller?¶
readonly
optional
multiLanguageInstaller:boolean
Whether to create multi-language installer. Defaults to unicode
option value.
oneClick?¶
readonly
optional
oneClick:boolean
Whether to create one-click installer or assisted.
Default¶
true
Overrides¶
CommonWindowsInstallerConfiguration
.oneClick
packElevateHelper?¶
readonly
optional
packElevateHelper:boolean
Whether to pack the elevate executable (required for electron-updater if per-machine installer used or can be used in the future). Ignored if perMachine
is set to true
.
Default¶
true
perMachine?¶
readonly
optional
perMachine:boolean
Whether to show install mode installer page (choice per-machine or per-user) for assisted installer. Or whether installation always per all users (per-machine).
If oneClick
is true
(default): Whether to install per all users (per-machine).
If oneClick
is false
and perMachine
is true
: no install mode installer page, always install per-machine.
If oneClick
is false
and perMachine
is false
(default): install mode installer page.
Default¶
false
Overrides¶
CommonWindowsInstallerConfiguration
.perMachine
preCompressedFileExtensions?¶
readonly
optional
preCompressedFileExtensions:null
|string
|string
[]
The file extension of files that will be not compressed. Applicable only for extraResources
and extraFiles
files.
Default¶
[".avi", ".mov", ".m4v", ".mp4", ".m4p", ".qt", ".mkv", ".webm", ".vmdk"]
publish?¶
optional
publish:Publish
Inherited from¶
removeDefaultUninstallWelcomePage?¶
readonly
optional
removeDefaultUninstallWelcomePage:boolean
assisted installer only. remove the default uninstall welcome page.
Default¶
false
runAfterFinish?¶
readonly
optional
runAfterFinish:boolean
Whether to run the installed application after finish. For assisted installer corresponding checkbox will be removed.
Default¶
true
Inherited from¶
CommonWindowsInstallerConfiguration
.runAfterFinish
script?¶
readonly
optional
script:null
|string
The path to NSIS script to customize installer. Defaults to build/installer.nsi
. See Custom NSIS script.
selectPerMachineByDefault?¶
readonly
optional
selectPerMachineByDefault:boolean
Whether to set per-machine or per-user installation as default selection on the install mode installer page.
Default¶
false
shortcutName?¶
readonly
optional
shortcutName:null
|string
The name that will be used for all shortcuts. Defaults to the application name.
Inherited from¶
CommonWindowsInstallerConfiguration
.shortcutName
unicode?¶
readonly
optional
unicode:boolean
Whether to create Unicode installer.
Default¶
true
Inherited from¶
uninstallDisplayName?¶
readonly
optional
uninstallDisplayName:string
The uninstaller display name in the control panel.
Default¶
${productName} ${version}
uninstallerIcon?¶
readonly
optional
uninstallerIcon:null
|string
The path to uninstaller icon, relative to the build resources or to the project directory.
Defaults to build/uninstallerIcon.ico
or application icon.
uninstallerSidebar?¶
readonly
optional
uninstallerSidebar:null
|string
assisted installer only. MUI_UNWELCOMEFINISHPAGE_BITMAP
, relative to the build resources or to the project directory.
Defaults to installerSidebar
option or build/uninstallerSidebar.bmp
or build/installerSidebar.bmp
or ${NSISDIR}\\Contrib\\Graphics\\Wizard\\nsis3-metro.bmp
warningsAsErrors?¶
readonly
optional
warningsAsErrors:boolean
If warningsAsErrors
is true
(default): NSIS will treat warnings as errors. If warningsAsErrors
is false
: NSIS will allow warnings.
Default¶
true