• Stars
    star
    319
  • Rank 131,491 (Top 3 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created about 7 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿ“€ Create traditional MSI installers for your Electron app

electron-wix-msi

Build status Build Status Coverage Status TypeScript

Traditional MSI Installers

Most Electron developers use the official windows-installer to create Windows installers. It does not require Administrator privileges and comes bundled with an automatic updater. If your app targets consumers, it will likely be the better choice.

However, if you need to create a traditional MSI the way Microsoft intended for software to be installed, this module is your friend. It creates a standalone MSI that installs your application to Program Files or any user-defined directory, much like the installers for Office, Node.js, or other popular apps. It allows up- and downgrades. For more details, see: Should I use this?

Look & Feel

Installer GIF

Prerequisites

Before using this module, make sure to install the Wix toolkit v3. Only the command line tools are required. If you are using AppVeyor or another Windows CI system, it is likely already installed.

npm i --save-dev electron-wix-msi

Whats new?

Version 3 is a major release for this toolkit. Many internals were reworked and V3 delivers improvements listed below. Please look out for the **๐Ÿ†• icon throughout this documentation for new parameter. Versions 4 and above are only adding features and requiring newer versions of Node.js without actually requiring any code changes on your part.

See the CHANGELOG.md for details.

New install folder structure

A new folder structure allows to update the MSI installation while your app is running without temporarily corrupting the installation. If files are locked during an update then the MSI engine schedules file operation after the next reboot. While files that are not locked will be overwritten immediately. That can cause unexpected behavior of your app. The version-based folder structure avoids these problems and leads to a more robust user experience.

C:\Program Files\
โ””โ”€ Kittens
     โ””โ”€ app-x.x.x // version of the MSI
     โ””โ”€ .installInfo // contains information about the installation
     โ””โ”€ kittens.exe // stub executable that launches the newest version
     โ””โ”€ Update.exe // optional auto updater 

Auto launch feature

Auto updating was a long missing feature for MSIs. No more!. The integration of special Squirrel.Windows version allows us to enable auto-updating. This feature is optional and can be enabled/disabled at package time, install time and can even be controlled at run time of your App. See end user documentation

Auto update feature

Auto updating was a long missing feature for MSIs. No more! The integration of a special Squirrel.Windows version allows us to enable auto-updating. This feature is completely optional and can be enabled/disabled at package time, install time and can even be controlled at run time of your App.

Desktop shortcut

Your App will now also have a shortcut on the Desktop.

Usage

Creating an installer is a three-step process:

import { MSICreator } from 'electron-wix-msi';

// Step 1: Instantiate the MSICreator
const msiCreator = new MSICreator({
  appDirectory: '/path/to/built/app',
  description: 'My amazing Kitten simulator',
  exe: 'kittens',
  name: 'Kittens',
  manufacturer: 'Kitten Technologies',
  version: '1.1.2',
  outputDirectory: '/path/to/output/folder'
});

// Step 2: Create a .wxs template file
const supportBinaries = await msiCreator.create();

// ๐Ÿ†• Step 2a: optionally sign support binaries if you
// sign you binaries as part of of your packaging script
supportBinaries.forEach(async (binary) => {
  // Binaries are the new stub executable and optionally
  // the Squirrel auto updater.
  await signFile(binary);
});

// Step 3: Compile the template to a .msi file
await msiCreator.compile();

Configuration

  • appDirectory (string) - The source directory for the installer, usually the output of electron-packager.

  • outputDirectory (string) - The output directory. Will contain the finished msi as well as the intermediate files .wxs and .wixobj.

  • exe (string) - The name of the exe.

  • description (string) - The app's description.

  • version (string) - The app's version.

  • name (string) - The app's name.

  • icon ๐Ÿ†• (string, optional) - A path to the Apps icon used for the stub executable. If not provided a lower quality version will be extracted form the exe

  • manufacturer (string) - Name of the manufacturer.

  • appUserModelId (string, optional) - String to set as appUserModelId on the shortcut. If none is passed, it'll be set to com.squirrel.(Name).(exe), which should match the id given to your app by Squirrel.

  • shortName (optional, string) - A short name for the app, used wherever spaces and special characters are not allowed. Will use the name if left undefined.

  • shortcutFolderName (string, optional) - Name of the shortcut folder in the Windows Start Menu. Will use the manufacturer field if left undefined.

  • shortcutName (string, optional) - Name of the shortcut in the Windows Start Menu. Will use the app's name field if left undefined.

  • programFilesFolderName (string, optional) - Name of the folder your app will live in. Will use the app's name if left undefined.

  • upgradeCode (string, optional) - A unique UUID used by your app to identify itself. This module will generate one for you, but it is important to reuse it to enable conflict-free upgrades.

  • cultures (string, optional) - Specify a specific culture for light.exe to build using the culture switch e.g en-us.

  • language (number, optional) - The Microsoft Windows Language Code identifier used by the installer. Will use 1033 (English, United-States) if left undefined.

  • certificateFile (string, optional) - The path to an Authenticode Code Signing Certificate.

  • certificatePassword (string, optional) - The password to decrypt the certificate given in certificateFile.

  • signWithParams (string, optional) - Parameters to pass to signtool.exe. Overrides certificateFile and certificatePassword.

  • extensions (array, optional) - Specify WiX extensions to use e.g ['WixUtilExtension', 'C:\My WiX Extensions\FooExtension.dll']

  • lightSwitches (array, optional) - Specify command line options to pass to light.exe e.g. ['-sval', '-ai'] Used to activate PropertyGroup options as specified in the Light Task documentation.

  • ui (UIOptions, optional) - Enables configuration of the UI. See below for more information.

  • arch (string, optional) - Defines the architecture the MSI is build for. Values can be either x86 or x64. Default's to x86 if left undefined.

  • features ๐Ÿ†• (Feature , optional) - Enables/disables features that will be built-in to the MSI autoUpdate: boolean and autoLaunch: boolean. These features will be then selectable by the end-user during the installation.

    • autoUpdate (boolean) - indicates whether the auto-updater is available as an install feature
    • autoLaunch (boolean) - indicates whether the launch on login is available as an install feature
UI Configuration (Optional)

The ui property in the options passed to the installer instance allows more detailed configuration of the UI. It has the following optional properties:

  • enabled (boolean, optional) - Whether to show a typical user interface. Defaults to true. If set to false, Windows will show a minimal "Windows is configuring NAME_OF_APP" interface.
  • template (string, optional) - Substitute your own XML that will be inserted into the final .wxs file before compiling the installer to customize the UI options.
  • chooseDirectory (boolean, optional) - If set to true, the end user will be able to choose the installation directory. Set to false by default. Without effect if a custom template is used.
  • localizations (string[], optional) - Provide an array of paths to .wxl files containing the localizations.
  • images (Optional) - Overwrites default installer images with custom files. I recommend JPG.
    • background - (optional, string) 493 x 312 Background bitmap used on the welcome and completion dialogs. Will be used as WixUIDialogBmp.
    • banner - (optional, string) 493 ร— 58 Top banner used on most dialogs that don't use background. Will be used as WixUIBannerBmp.
    • exclamationIcon - (optional, string) 32 x 32 Exclamation icon on the WaitForCostingDlg dialog. Will be used as WixUIExclamationIco.
    • infoIcon - (optional, string) 32 x 32 Information icon on the cancel and error dialogs. Will be used as WixUIInfoIco.
    • newIcon - (optional, string) 16 x 16 "New folder" icon for the "browse" dialog. Will be used as WixUINewIco.
    • upIcon - (optional, string) 16 x 16 "Up" icon for the "browse" dialog. Will be used as WixUIUpIco.
Template Configuration (Optional)

This module uses XML bulding blocks to generate the final .wxs file. After instantiating the class, but before calling create(), you can change the default XML. The available fields on the class are:

  • componentTemplate (string) - Used for <Component> elements. One per file.
  • componentRefTemplate (string) - Used for <ComponentRef> elements. Again, one per file.
  • directoryTemplate (string) - Used for <Directory> elements. This module does not use <DirectoryRef> elements.
  • wixTemplate (string) - Used as the master template.
  • uiTemplate (string) - Used as the master UI template.
  • backgroundTemplate (string) - Used as the background template.

๐Ÿ†• End user documentation

License

MIT, please see LICENSE.md for details.

More Repositories

1

electron-builder

A complete solution to package and build a ready for distribution Electron app with โ€œauto updateโ€ support out of the box
TypeScript
13,564
star
2

devtron

[LOOKING FOR MAINTAINERS] An Electron DevTools Extension
JavaScript
1,728
star
3

spectron

DEPRECATED: ๐Ÿ”Ž Test Electron apps using ChromeDriver
JavaScript
1,677
star
4

electron-json-storage

๐Ÿ“ฆ Easily write and read user settings in Electron apps
JavaScript
1,433
star
5

electron-compile

DEPRECATED: Electron supporting package to compile JS and CSS in Electron applications
JavaScript
1,008
star
6

electron-webpack

Scripts and configurations to compile Electron applications using webpack
TypeScript
903
star
7

electron-prebuilt

๐ŸŽ‚ Retired project. See README
JavaScript
760
star
8

electron-webpack-quick-start

A bare minimum project structure to get started developing with electron-webpack.
JavaScript
729
star
9

electron-windows-store

๐Ÿ“ฆ Turn Electron Apps into Windows AppX Packages
JavaScript
678
star
10

electron-installer-windows

Create a Windows package for your Electron app.
JavaScript
470
star
11

electron-remote

DEPRECATED: Execute JavaScript in remote Electron processes, but more betterer
JavaScript
430
star
12

electron-installer-debian

Create a Debian package for your Electron app.
JavaScript
377
star
13

electron-installer-dmg

Create DMG installers for your electron apps using appdmg.
JavaScript
298
star
14

electron-spellchecker

Implement spellchecking, correctly
JavaScript
237
star
15

electron-builder-binaries

NSIS
172
star
16

electron-prebuilt-compile

electron-prebuilt with Babel and React built-in
JavaScript
169
star
17

electron-build-service

Package Electron applications in a distributable format on any platform for any platform
Go
138
star
18

electron-forge-templates

Templates bundled with Electron Forge <= 5 to create Electron apps using popular JavaScript frameworks
JavaScript
104
star
19

electron-installer-redhat

Create a Red Hat / RPM package for your Electron app.
JavaScript
81
star
20

electron-installer-snap

Build Snap packages for Electron applications
JavaScript
49
star
21

electrify

Step-by-step wizard to prepare Electron app for distribution, from packaging to auto-update.
TypeScript
48
star
22

electron-installer-zip

Create a ZIP file with support for symlinks required by Electron on macOS
JavaScript
46
star
23

welcome

Organization mission statement and contribution guidelines
45
star
24

electron-compilers

DEPRECATED: Compiler implementations for electron-compile
JavaScript
35
star
25

electron-installer-common

Common functionality for creating Node modules which create distributable Electron apps
JavaScript
9
star
26

electron-forge-container

Docker container for building Electron apps via Electron Forge
Dockerfile
7
star
27

create-electron-app

JavaScript
5
star
28

electron-forge-plugin-compile

Electron Compile plugin for Electron Forge
JavaScript
3
star
29

vue-cli-plugin-electron-forge

@vue/cli plugin to add Electron Forge
3
star