Skip to content

Commit 69c3614

Browse files
MariaDimadevelar
authored andcommitted
feat(nsis): Option to not pack "elevate.exe"
Close #1620, Close #1621
1 parent e700b78 commit 69c3614

File tree

5 files changed

+40
-9
lines changed

5 files changed

+40
-9
lines changed

packages/electron-builder/src/options/winOptions.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,12 @@ export interface NsisOptions extends CommonNsisOptions, TargetSpecificOptions {
231231
* @default false
232232
*/
233233
readonly deleteAppDataOnUninstall?: boolean
234+
235+
/**
236+
* Whether to pack the elevate executable (required for electron-updater if per-machine installer used or can be used in the future). Ignored if `perMachine` is set to `true`.
237+
* @default true
238+
*/
239+
readonly packElevateHelper?: boolean
234240
}
235241

236242
/**

packages/electron-builder/src/targets/nsis.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import sanitizeFileName from "sanitize-filename"
1313
import { v5 as uuid5 } from "uuid-1345"
1414
import { NsisOptions, PortableOptions } from "../options/winOptions"
1515
import { normalizeExt } from "../platformPackager"
16-
import { getSignVendorPath } from "../windowsCodeSign"
1716
import { WinPackager } from "../winPackager"
1817
import { archive } from "./archive"
1918
import { bundledLanguages, getLicenseFiles, lcid, toLangWithRegion } from "./license"
@@ -105,10 +104,15 @@ export class NsisTarget extends Target {
105104

106105
/** @private */
107106
async buildAppPackage(appOutDir: string, arch: Arch) {
108-
await BluebirdPromise.all([
109-
copyFile(path.join(await nsisPathPromise, "elevate.exe"), path.join(appOutDir, "resources", "elevate.exe"), null, false),
110-
copyFile(path.join(await getSignVendorPath(), "windows-10", Arch[arch], "signtool.exe"), path.join(appOutDir, "resources", "signtool.exe"), null, false),
111-
])
107+
let isPackElevateHelper = this.options.packElevateHelper
108+
if (isPackElevateHelper === false && this.options.perMachine === true) {
109+
isPackElevateHelper = true
110+
warn("`packElevateHelper = false` is ignored, because `perMachine` is set to `true`")
111+
}
112+
113+
if (isPackElevateHelper !== false) {
114+
await copyFile(path.join(await nsisPathPromise, "elevate.exe"), path.join(appOutDir, "resources", "elevate.exe"), null, false)
115+
}
112116

113117
const packager = this.packager
114118
const format = this.options.useZip ? "zip" : "7z"

test/src/helpers/winHelper.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,17 @@ export async function expectUpdateMetadata(context: PackedContext, arch: Arch =
1919
expect(data).toMatchSnapshot()
2020
}
2121

22-
export async function doTest(outDir: string, perUser: boolean, productFilename = "TestApp Setup", name = "TestApp", menuCategory: string | null = null) {
22+
export async function checkHelpers(resourceDir: string, packElevateHelper: boolean) {
23+
const elevateHelperExecutable = path.join(resourceDir, "elevate.exe")
24+
if (packElevateHelper) {
25+
await assertThat(elevateHelperExecutable).isFile()
26+
}
27+
else {
28+
await assertThat(elevateHelperExecutable).doesNotExist()
29+
}
30+
}
31+
32+
export async function doTest(outDir: string, perUser: boolean, productFilename = "TestApp Setup", name = "TestApp", menuCategory: string | null = null, packElevateHelper = true) {
2333
if (process.env.DO_WINE !== "true") {
2434
return BluebirdPromise.resolve()
2535
}
@@ -59,6 +69,13 @@ export async function doTest(outDir: string, perUser: boolean, productFilename =
5969
await assertThat(path.join(startMenuDir, `${productFilename}.lnk`)).isFile()
6070
}
6171

72+
if (packElevateHelper) {
73+
await assertThat(path.join(instDir, name, "resources", "elevate.exe")).isFile()
74+
}
75+
else {
76+
await assertThat(path.join(instDir, name, "resources", "elevate.exe")).doesNotExist()
77+
}
78+
6279
let fsAfter = await listFiles()
6380

6481
let fsChanges = diff(fsBefore, fsAfter, driveC)

test/src/windows/installerTest.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { readFile } from "fs-extra-p"
44
import { safeLoad } from "js-yaml"
55
import * as path from "path"
66
import { app, assertPack, copyTestAsset } from "../helpers/packTester"
7-
import { doTest, expectUpdateMetadata } from "../helpers/winHelper"
7+
import { checkHelpers, doTest, expectUpdateMetadata } from "../helpers/winHelper"
88

99
const nsisTarget = Platform.WINDOWS.createTarget(["nsis"])
1010

@@ -112,6 +112,7 @@ test.ifAll("allowToChangeInstallationDirectory", app({
112112
delete updateInfo.sha512
113113
delete updateInfo.releaseDate
114114
expect(updateInfo).toMatchSnapshot()
115+
await checkHelpers(context.getResources(Platform.WINDOWS), true)
115116
await doTest(context.outDir, false)
116117
}
117118
}))

test/src/windows/oneClickInstallerTest.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { safeLoad } from "js-yaml"
55
import * as path from "path"
66
import { assertThat } from "../helpers/fileAssert"
77
import { app, appThrows, assertPack, copyTestAsset, modifyPackageJson } from "../helpers/packTester"
8-
import { doTest, expectUpdateMetadata } from "../helpers/winHelper"
8+
import { checkHelpers, doTest, expectUpdateMetadata } from "../helpers/winHelper"
99

1010
const nsisTarget = Platform.WINDOWS.createTarget(["nsis"])
1111

@@ -19,12 +19,14 @@ test("one-click", app({
1919
},
2020
nsis: {
2121
deleteAppDataOnUninstall: true,
22+
packElevateHelper: false
2223
},
2324
}
2425
}, {
2526
signed: true,
2627
packed: async (context) => {
27-
await doTest(context.outDir, true)
28+
await checkHelpers(context.getResources(Platform.WINDOWS, Arch.ia32), false)
29+
await doTest(context.outDir, true, "TestApp Setup", "TestApp", null, false)
2830
await expectUpdateMetadata(context, Arch.ia32, true)
2931
}
3032
}))
@@ -81,6 +83,7 @@ test.ifDevOrLinuxCi("perMachine, no run after finish", app({
8183
delete updateInfo.sha512
8284
delete updateInfo.releaseDate
8385
expect(updateInfo).toMatchSnapshot()
86+
await checkHelpers(context.getResources(Platform.WINDOWS, Arch.ia32), true)
8487
await doTest(context.outDir, false)
8588
},
8689
}))

0 commit comments

Comments
 (0)