or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

build-system.mdcode-signing.mdconfiguration.mdindex.mdlinux-packaging.mdmacos-packaging.mdplatform-targets.mdpublishing.mdwindows-packaging.md
tile.json

windows-packaging.mddocs/

Windows Packaging

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.

Capabilities

Windows Configuration

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
};

NSIS Installer Options

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
};

NSIS Web Installer

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;
}

MSI Installer Options

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;
}

Portable Executable Options

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;
}

Squirrel.Windows Options

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;
}

AppX (Windows Store) Options

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;
}

Code Signing

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"
  }
};

Common Windows Installer Configuration

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;
}

Environment Variables

Common environment variables for Windows signing:

  • WINDOWS_CERT_PASSWORD - Certificate password
  • CSC_LINK - Certificate file path
  • CSC_KEY_PASSWORD - Certificate password
  • WIN_CSC_LINK - Windows-specific certificate path

Usage 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.