diff --git a/.changeset/violet-icons-approve.md b/.changeset/violet-icons-approve.md new file mode 100644 index 00000000000..ae0906823f3 --- /dev/null +++ b/.changeset/violet-icons-approve.md @@ -0,0 +1,5 @@ +--- +"electron-updater": patch +--- + +feat(nsis): add option to disable differential download diff --git a/docs/api/electron-builder.md b/docs/api/electron-builder.md index 90f6e704e06..80c172a9071 100644 --- a/docs/api/electron-builder.md +++ b/docs/api/electron-builder.md @@ -1788,6 +1788,9 @@ return path.join(target.outDir, __${target.name}-${getArtifactArchName(arc

Currently false to prevent breaking the current API, but it should be changed to default true at some point that breaking changes are allowed.

  • +

    disableDifferentialDownload = false Boolean - NSIS only Disable differential downloads and always perform full download of installer.

    +
  • +
  • forceDevUpdateConfig = false Boolean - Allows developer to force the updater to work in “dev” mode, looking for “dev-app-update.yml” instead of “app-update.yml” Dev: path.join(this.app.getAppPath(), "dev-app-update.yml") Prod: path.join(process.resourcesPath!, "app-update.yml")

  • diff --git a/packages/electron-updater/src/AppUpdater.ts b/packages/electron-updater/src/AppUpdater.ts index e2a28585060..8aae97272d0 100644 --- a/packages/electron-updater/src/AppUpdater.ts +++ b/packages/electron-updater/src/AppUpdater.ts @@ -91,6 +91,13 @@ export abstract class AppUpdater extends (EventEmitter as new () => TypedEmitter */ disableWebInstaller = false + /** + * *NSIS only* Disable differential downloads and always perform full download of installer. + * + * @default false + */ + disableDifferentialDownload = false + /** * Allows developer to force the updater to work in "dev" mode, looking for "dev-app-update.yml" instead of "app-update.yml" * Dev: `path.join(this.app.getAppPath(), "dev-app-update.yml")` @@ -493,6 +500,7 @@ export abstract class AppUpdater extends (EventEmitter as new () => TypedEmitter requestHeaders: this.computeRequestHeaders(updateInfoAndProvider.provider), cancellationToken, disableWebInstaller: this.disableWebInstaller, + disableDifferentialDownload: this.disableDifferentialDownload, }).catch((e: any) => { throw errorHandler(e) }) @@ -696,6 +704,7 @@ export interface DownloadUpdateOptions { readonly requestHeaders: OutgoingHttpHeaders readonly cancellationToken: CancellationToken readonly disableWebInstaller?: boolean + readonly disableDifferentialDownload?: boolean } function hasPrereleaseComponents(version: SemVer) { diff --git a/packages/electron-updater/src/NsisUpdater.ts b/packages/electron-updater/src/NsisUpdater.ts index 41339441d0c..a76ca432cf4 100644 --- a/packages/electron-updater/src/NsisUpdater.ts +++ b/packages/electron-updater/src/NsisUpdater.ts @@ -64,7 +64,11 @@ export class NsisUpdater extends BaseUpdater { "disableWebInstaller is set to false, you should set it to true if you do not plan on using a web installer. This will default to true in a future version." ) } - if (isWebInstaller || (await this.differentialDownloadInstaller(fileInfo, downloadUpdateOptions, destinationFile, provider))) { + if ( + isWebInstaller || + downloadUpdateOptions.disableDifferentialDownload || + (await this.differentialDownloadInstaller(fileInfo, downloadUpdateOptions, destinationFile, provider)) + ) { await this.httpExecutor.download(fileInfo.url, destinationFile, downloadOptions) }