
Security News
Deno 2.2 Improves Dependency Management and Expands Node.js Compatibility
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
electron-installer-windows
Advanced tools
Create a Windows package for your Electron app.
This tool relies on the awesome Squirrel.Windows framework written by @paulcbetts. It takes care of creating the actual package, signing it, dealing with updates, and many more things. Gotta give credit where credit is due, ya know.
This tool requires Node 6 or greater.
I'd recommend building your packages on your target platform, but if you have to run this on Mac OS X or Linux, you will need to install mono
and wine
through your package manager.
You won't get an .msi
installer though, only .nupkg
and .exe
installers. To get an .msi
installer you'll need to run on Windows.
For use from command-line:
$ npm install -g electron-installer-windows
For use in npm scripts or programmatically:
$ npm install --save-dev electron-installer-windows
Say your Electron app lives in path/to/app
, and has a structure like this:
.
├── LICENSE
├── README.md
├── node_modules
│ ├── electron-packager
│ └── electron-prebuilt
├── package.json
├── resources
│ ├── Icon.png
│ ├── IconTemplate.png
│ └── IconTemplate@2x.png
└── src
├── index.js
├── main
│ └── index.js
└── renderer
├── index.html
└── index.js
You now run electron-packager
to build the app for Windows:
$ electron-packager . app --platform win32 --arch x64 --out dist/
And you end up with something like this in your dist
folder:
.
└── dist
└── app-win32-x64
├── LICENSE
├── LICENSES.chromium.html
├── content_resources_200_percent.pak
├── content_shell.pak
├── d3dcompiler_47.dll
├── icudtl.dat
├── libEGL.dll
├── libGLESv2.dll
├── locales
├── msvcp120.dll
├── msvcr120.dll
├── natives_blob.bin
├── node.dll
├── pdf.dll
├── app.exe
├── resources
├── snapshot_blob.bin
├── ui_resources_200_percent.pak
├── vccorlib120.dll
├── version
└── xinput1_3.dll
How do you turn that into a Windows package that your users can install?
If you want to run electron-installer-windows
straight from the command-line, install the package globally:
$ npm install -g electron-installer-windows
And point it to your built app:
$ electron-installer-windows --src dist/app-win32-x64/ --dest dist/installers/
You'll end up with the package at dist/installers/app-0.0.1-setup.exe
.
If you want to run electron-installer-windows
through npm, install the package locally:
$ npm install --save-dev electron-installer-windows
Edit the scripts
section of your package.json
:
{
"name": "app",
"description": "An awesome app!",
"version": "0.0.1",
"scripts": {
"start": "electron .",
"build": "electron-packager . app --platform win32 --arch x64 --out dist/",
"setup": "electron-installer-windows --src dist/app-win32-x64/ --dest dist/installers/"
},
"devDependencies": {
"electron-installer-windows": "*",
"electron-packager": "*",
"electron-prebuilt": "*"
}
}
And run the script:
$ npm run setup
You'll end up with the package at dist/installers/app-0.0.1-setup.exe
.
Install the package locally:
$ npm install --save-dev electron-installer-windows
And write something like this:
var installer = require('electron-installer-windows')
var options = {
src: 'dist/app-win32-x64/',
dest: 'dist/installers/'
}
console.log('Creating package (this may take a while)')
installer(options)
.then(() => console.log(`Successfully created package at ${options.dest}`))
.catch(err => {
console.error(err, err.stack)
process.exit(1)
})
Alternatively, it is possible to use the callback pattern:
installer(options, function (err) {
if (err) {
console.error(err, err.stack)
process.exit(1)
}
console.log(`Successfully created package at ${options.dest}`)
})
You'll end up with the package at dist/installers/app-0.0.1-setup.exe
.
Even though you can pass most of these options through the command-line interface, it may be easier to create a configuration file:
{
"dest": "dist/installers/",
"icon": "resources/Icon.ico",
"tags": [
"Utility"
]
}
And pass that instead with the config
option:
$ electron-installer-windows --src dist/app-win32-x64/ --config config.json
Anyways, here's the full list of options:
Type: String
Default: undefined
Path to the folder that contains your built Electron application.
Type: String
Default: undefined
Path to the folder that will contain your Windows installer.
Type: Function
Default: function (dest, src) { return path.join(dest, src); }
Function that renames all files generated by the task just before putting them in your dest
folder.
Type: String
Default: package.name
Name of the package (e.g. atom
), used in the id
field of the nuspec
file.
Type: String
Default: package.productName || package.name
Name of the application (e.g. Atom
), used in the title
field of the nuspec
file.
Type: String
Default: package.description
Short description of the application, used in the summary
field of the nuspec
file.
Type: String
Default: package.productDescription || package.description
Long description of the application, used in the description
field of the nuspec
file.
Type: String
Default: package.version
Long description of the application, used in the version
field of the nuspec
file.
Type: String
Default: package.copyright
Copyright details for the package, used in the copyright
field of the nuspec
file.
Type: Array[String]
Default: package.author
List of authors of the package, used in the authors
field of the spec
file.
Type: Array[String]
Default: package.author
List of owners of the package, used in the authors
field of the spec
file.
Type: String
Default: package.homepage || package.author.url
URL of the homepage for the package, used in the projectUrl
field of the spec
file.
Type: String
Default: undefined
URL for the image to use as the icon for the package in the Manage NuGet Packages dialog box, used in the iconUrl
field of the spec
file.
Type: String
Default: undefined
URL for the license that the package is under, used in the licenseUrl
field of the spec
file.
Type: String
Default: false
Whether the client needs to ensure that the package license (described by licenseUrl
) is accepted before the package is installed, used in the requireLicenseAcceptance
field of the spec
file.
Type: Array[String]
Default: []
List of tags and keywords that describe the package, used in the tags
field of the spec
file.
Type: String
Default: undefined
Path to an Authenticode Code Signing Certificate.
Type: String
Default: undefined
Password to decrypt the certificate given in certificateFile
.
Type: String
Default: undefined
Parameters to pass to signtool
. Overrides certificateFile
and certificatePassword
.
Type: String
Default: undefined
URL to your existing updates. If given, these will be downloaded to create delta updates.
If you are using Amazon S3 to store your releases, read the documentation for Squirrel.Windows on Amazon S3.
If you are using GitHub, read the documentation for Squirrel.Windows on GitHub.
Internet Explorer's SmartScreen Filter, and antivirus programs, may flag your package as malware if it's not signed. Luckily, signing your package with electron-installer-windows
is pretty easy. Let's test the process with a self-signed certificate.
To generate the certificate, open the Developer Command Prompt for Visual Studio and execute the following:
$ makecert -sv my_private_key.pvk -n "CN=MyTestCertificate" my_test_certificate.cer -b 01/01/2016 -e 01/01/2026 -r
$ pvk2pfx -pvk my_private_key.pvk -spc my_test_certificate.cer -pfx my_signing_key.pfx -po my_password
Now we can tell electron-installer-windows
to sign the packages that it generates with that certificate:
$ electron-installer-windows --src dist/app-win32-x64/ --dest dist/installers/ --certificateFile my_signing_key.pfx --certificatePassword my_password
Boom, that's it. Now get a standard code signing certificate from a real certificate authority!
Current version: 1.7.9
To update Squirrel to the latest version, head over to the releases page
Current version: 4.6.0.4971
To update NuGet to the latest version, head over to the releases page.
git clone git://github.com/unindented/electron-installer-windows.git
Copyright (c) 2016 Daniel Perez Alvarez (unindented.org). This is free software, and may be redistributed under the terms specified in the LICENSE file.
FAQs
Create a Windows package for your Electron app.
The npm package electron-installer-windows receives a total of 498 weekly downloads. As such, electron-installer-windows popularity was classified as not popular.
We found that electron-installer-windows demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Security News
React's CRA deprecation announcement sparked community criticism over framework recommendations, leading to quick updates acknowledging build tools like Vite as valid alternatives.
Security News
Ransomware payment rates hit an all-time low in 2024 as law enforcement crackdowns, stronger defenses, and shifting policies make attacks riskier and less profitable.