Windows-specific packaging including NSIS installers, MSI packages, Squirrel.Windows auto-updater, and comprehensive code signing. Supports both x64 and ia32 architectures with various installer formats.
Core Windows build configuration with signing and installer options.
/**
* Windows-specific build configuration
*/
interface WindowsConfiguration extends PlatformSpecificBuildOptions {
/** Target configurations (NSIS, MSI, portable, etc.) */
target?: TargetConfiguration | Array<TargetConfiguration | string> | string | null;
/** Application icon (.ico file) */
icon?: string | null;
/** Legal trademarks */
legalTrademarks?: string | null;
/** Signtool.exe additional options */
signtoolOptions?: Array<string> | null;
/** Code signing configuration */
sign?: string | WindowsSignOptions | null;
/** Certificate file path (.p12/.pfx) */
certificateFile?: string | null;
/** Certificate password */
certificatePassword?: string | null;
/** Certificate SHA1 thumbprint */
certificateSha1?: string | null;
/** Certificate subject name */
certificateSubjectName?: string | null;
/** RFC 3161 timestamp server URL */
rfc3161TimeStampServer?: string | null;
/** Legacy timestamp server URL */
timeStampServer?: string | null;
/** Publisher display name */
publisherName?: string | Array<string> | null;
/** Verify update package signatures */
verifyUpdateCodeSignature?: boolean;
/** Requested execution level */
requestedExecutionLevel?: "asInvoker" | "highestAvailable" | "requireAdministrator" | null;
/** Application manifest file */
applicationManifest?: string | null;
/** Windows-specific extra files */
extraFiles?: Array<FileSet> | FileSet | null;
/** Windows-specific extra resources */
extraResources?: Array<FileSet> | FileSet | null;
}Usage Examples:
import { WindowsConfiguration } from "electron-builder";
const windowsConfig: WindowsConfiguration = {
target: [
{ target: "nsis", arch: ["x64", "ia32"] },
{ target: "portable", arch: ["x64"] },
{ target: "zip", arch: ["x64", "ia32"] }
],
icon: "build/icon.ico",
publisherName: "My Company",
certificateFile: "certificates/code-signing.p12",
certificatePassword: process.env.WINDOWS_CERT_PASSWORD,
rfc3161TimeStampServer: "http://timestamp.digicert.com",
requestedExecutionLevel: "asInvoker",
verifyUpdateCodeSignature: true
};Configuration for NSIS-based Windows installers with extensive customization.
/**
* NSIS installer configuration
*/
interface NsisOptions {
/** One-click installer (no user interaction) */
oneClick?: boolean;
/** Install for all users (requires admin) */
perMachine?: boolean;
/** Allow elevation prompt */
allowElevation?: boolean;
/** Allow user to change installation directory */
allowToChangeInstallationDirectory?: boolean;
/** Installer icon */
installerIcon?: string | null;
/** Uninstaller icon */
uninstallerIcon?: string | null;
/** Installer header image */
installerHeader?: string | null;
/** Installer header icon */
installerHeaderIcon?: string | null;
/** Installer sidebar image */
installerSidebar?: string | null;
/** Uninstaller sidebar image */
uninstallerSidebar?: string | null;
/** Supported installer languages */
installerLanguages?: Array<string> | string | null;
/** Default language */
language?: string | null;
/** Multi-language installer */
multiLanguageInstaller?: boolean;
/** Pack elevate helper */
packElevateHelper?: boolean;
/** Pre-compressed file extensions */
preCompressedFileExtensions?: Array<string> | null;
/** Unicode NSIS */
unicode?: boolean;
/** Application GUID */
guid?: string | null;
/** Treat warnings as errors */
warningsAsErrors?: boolean;
/** Display language selector */
displayLanguageSelector?: boolean;
/** Installation directory name */
installDirectoryName?: string | null;
/** Desktop shortcut */
createDesktopShortcut?: boolean;
/** Start menu shortcut */
createStartMenuShortcut?: boolean;
/** Shortcut name */
shortcutName?: string | null;
/** Menu category */
menuCategory?: string | null;
/** Run after finish */
runAfterFinish?: boolean;
/** Delete app data on uninstall */
deleteAppDataOnUninstall?: boolean;
/** License file */
license?: string | null;
/** Include/exclude patterns */
include?: string | null;
/** Custom NSIS script */
script?: string | null;
}Usage Examples:
import { NsisOptions } from "electron-builder";
const nsisOptions: NsisOptions = {
oneClick: false,
perMachine: false,
allowElevation: true,
allowToChangeInstallationDirectory: true,
installerIcon: "build/installer.ico",
uninstallerIcon: "build/uninstaller.ico",
installerHeader: "build/installer-header.bmp",
installerSidebar: "build/installer-sidebar.bmp",
createDesktopShortcut: true,
createStartMenuShortcut: true,
shortcutName: "My Application",
runAfterFinish: true,
deleteAppDataOnUninstall: false,
license: "LICENSE.txt",
language: "en_US",
multiLanguageInstaller: true,
installerLanguages: ["en_US", "de_DE", "fr_FR"],
unicode: true
};
const config = {
win: {
target: "nsis"
},
nsis: nsisOptions
};Configuration for web-based NSIS installers that download app files on demand.
/**
* NSIS web installer configuration
*/
interface NsisWebOptions extends NsisOptions {
/** Application package URL */
appPackageUrl?: string | null;
/** Application package size */
appPackageSize?: number | null;
/** Artifacts URL pattern */
artifactName?: string | null;
}Configuration for Windows MSI installer packages.
/**
* MSI installer configuration
*/
interface MsiOptions {
/** MSI upgrade code GUID */
upgradeCode?: string | null;
/** Wrap MSI in .exe bootstrapper */
warningsAsErrors?: boolean | null;
/** Additional MSI properties */
additionalWixProperties?: Array<string> | null;
/** WiX file for customization */
wxs?: string | null;
/** UI banner image */
ui?: MsiUiOptions | null;
/** One-click install */
oneClick?: boolean;
/** Per-machine installation */
perMachine?: boolean;
/** MSI language */
language?: string | null;
/** Create desktop shortcut */
createDesktopShortcut?: boolean;
/** Create start menu shortcut */
createStartMenuShortcut?: boolean;
/** Shortcut name */
shortcutName?: string | null;
/** Menu category/folder */
menuCategory?: string | null;
}
/**
* MSI UI customization options
*/
interface MsiUiOptions {
/** Welcome dialog image */
chooseDirectory?: string | null;
/** Installation progress dialog */
installDirectory?: string | null;
}Configuration for portable (no-install) Windows executables.
/**
* Portable executable configuration
*/
interface PortableOptions {
/** Unpack portable app to temp directory */
unpackDirName?: string | null;
/** Request elevation for portable app */
requestExecutionLevel?: "asInvoker" | "highestAvailable" | "requireAdministrator" | null;
/** Splashscreen image */
splashImage?: string | null;
}Configuration for Squirrel.Windows auto-updater and installer.
/**
* Squirrel.Windows configuration
*/
interface SquirrelWindowsOptions {
/** Remote update URL */
remoteReleases?: string | null;
/** Remote token for authentication */
remoteToken?: string | null;
/** Use package directory layout */
useAppIdAsId?: boolean;
/** Loading GIF for installer */
loadingGif?: string | null;
/** MSI wrapper options */
msi?: MsiWrappedOptions | null;
/** Executable name for updates */
name?: string | null;
/** Package name for Squirrel */
packageName?: string | null;
/** Description for package */
description?: string | null;
/** Package authors */
authors?: string | null;
/** Package owners */
owners?: string | null;
}
/**
* MSI wrapper for Squirrel.Windows
*/
interface MsiWrappedOptions {
/** Upgrade code GUID */
upgradeCode?: string | null;
/** Wrap in MSI */
enabled?: boolean;
}Configuration for Windows Store AppX packages.
/**
* Windows Store AppX configuration
*/
interface AppXOptions {
/** Application ID */
applicationId?: string | null;
/** Background color */
backgroundColor?: string | null;
/** Display name */
displayName?: string | null;
/** Identity name */
identityName?: string | null;
/** Publisher display name */
publisherDisplayName?: string | null;
/** Publisher identity */
publisher?: string | null;
/** Languages supported */
languages?: Array<string> | string | null;
/** AppX manifest additions */
manifest?: string | null;
/** Custom AppX manifest */
customManifest?: string | null;
/** Show name on tiles */
showNameOnTiles?: boolean;
/** Add auto launch */
addAutoLaunch?: boolean;
/** AppX artifacts */
artifacts?: Array<any> | null;
}Windows code signing configuration with certificate management.
/**
* Windows code signing options
*/
interface WindowsSignOptions {
/** Certificate file path */
certificateFile?: string | null;
/** Certificate password */
certificatePassword?: string | null;
/** Certificate SHA1 thumbprint */
certificateSha1?: string | null;
/** Certificate subject name */
certificateSubjectName?: string | null;
/** Additional signtool options */
signtoolOptions?: Array<string> | null;
/** RFC 3161 timestamp server */
rfc3161TimeStampServer?: string | null;
/** Legacy timestamp server */
timeStampServer?: string | null;
/** Additional certificate file */
additionalCertificateFile?: string | null;
}
/**
* Custom Windows signing function
*/
interface CustomWindowsSign {
(configuration: CustomWindowsSignTaskConfiguration, packager: WinPackager): Promise<any>;
}
/**
* Custom signing task configuration
*/
interface CustomWindowsSignTaskConfiguration {
/** File path to sign */
path: string;
/** Packager instance */
packager: WinPackager;
/** Signing options */
options: WindowsSignOptions;
}
/**
* Windows packager with signing capabilities
*/
class WinPackager extends PlatformPackager {
/** Sign file with certificate */
sign(file: string, options?: WindowsSignOptions): Promise<void>;
/** Create Windows package */
pack(outDir: string, arch: Arch, targets: Array<Target>): Promise<any>;
}Usage Examples:
import { WindowsSignOptions, CustomWindowsSign } from "electron-builder";
// Standard certificate signing
const signOptions: WindowsSignOptions = {
certificateFile: "certs/code-signing.p12",
certificatePassword: process.env.CERT_PASSWORD,
rfc3161TimeStampServer: "http://timestamp.digicert.com",
signtoolOptions: ["/tr", "http://timestamp.digicert.com", "/td", "sha256"]
};
// Custom signing function
const customSign: CustomWindowsSign = async (configuration, packager) => {
console.log(`Signing ${configuration.path}`);
// Custom signing logic using Azure Key Vault, HSM, etc.
await packager.sign(configuration.path, configuration.options);
};
const config = {
win: {
sign: customSign, // or signOptions for standard signing
certificateSubjectName: "My Company, Inc.",
rfc3161TimeStampServer: "http://timestamp.digicert.com"
}
};Shared configuration options across Windows installer types.
/**
* Common Windows installer configuration
*/
interface CommonWindowsInstallerConfiguration {
/** One-click installation */
oneClick?: boolean;
/** Per-machine installation */
perMachine?: boolean;
/** Allow elevation */
allowElevation?: boolean;
/** Run after finish */
runAfterFinish?: boolean;
/** Create desktop shortcut */
createDesktopShortcut?: boolean;
/** Create start menu shortcut */
createStartMenuShortcut?: boolean;
/** Shortcut name */
shortcutName?: string | null;
/** Menu category */
menuCategory?: string | null;
/** Delete app data on uninstall */
deleteAppDataOnUninstall?: boolean;
}Common environment variables for Windows signing:
WINDOWS_CERT_PASSWORD - Certificate passwordCSC_LINK - Certificate file pathCSC_KEY_PASSWORD - Certificate passwordWIN_CSC_LINK - Windows-specific certificate pathUsage Examples:
// Environment-based signing configuration
const config = {
win: {
// Certificate automatically detected from environment
publisherName: "My Company",
rfc3161TimeStampServer: "http://timestamp.digicert.com"
}
};
// Multi-target Windows build
const multiTargetConfig = {
win: {
target: [
{ target: "nsis", arch: ["x64", "ia32"] },
{ target: "msi", arch: ["x64"] },
{ target: "portable", arch: ["x64"] },
{ target: "appx", arch: ["x64"] }
]
},
nsis: {
oneClick: false,
allowToChangeInstallationDirectory: true
},
msi: {
oneClick: true,
perMachine: true
}
};Windows packaging provides comprehensive support for modern Windows distribution including multiple installer formats, code signing, Windows Store submission, and enterprise deployment scenarios.