Skip to content

Commit 711d248

Browse files
committed
fix(windows): repair packaging and align installer defaults
1 parent e08373d commit 711d248

7 files changed

Lines changed: 30 additions & 3 deletions

File tree

‎applets/weblite/scripts/package.mjs‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,14 @@ try {
5656
version: manifest.version,
5757
exe: "weblite.exe",
5858
icon: path.join(root, "assets/icon.ico"),
59-
programFilesFolderName: "Weblite",
59+
programFilesFolderName: "WebLite",
6060
nestedFolderName: "JumpServer",
6161
shortName: "WebLite",
6262
shortcutFolderName: "JumpServer",
6363
appUserModelId: "com.jumpserver.weblite",
6464
arch: "x64",
6565
defaultInstallMode: "perMachine",
66+
ui: { chooseDirectory: true },
6667
// Keep this stable so Windows Installer upgrades the existing deployment.
6768
upgradeCode: "BBB88A37-4470-4B1C-B582-EAE84A775985"
6869
});

‎electron/assets/installer.nsh‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
; Use the standard install-mode logic, including existing paths and /D overrides.
2+
!undef APP_FILENAME
3+
!define APP_FILENAME "JumpServer\Client"
4+
; Keep explicit app-data removal tied to the product rather than its install directory.
5+
!define /ifndef APP_PRODUCT_FILENAME "${PRODUCT_FILENAME}"

‎electron/forge.config.ts‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ const config: ForgeConfig = {
219219
},
220220
nsis: {
221221
oneClick: false,
222+
selectPerMachineByDefault: true,
223+
include: path.join(electronRoot, "assets", "installer.nsh"),
222224
allowToChangeInstallationDirectory: true,
223225
createDesktopShortcut: true,
224226
createStartMenuShortcut: true,
@@ -229,6 +231,7 @@ const config: ForgeConfig = {
229231
}
230232
}),
231233
new MakerWix({
234+
defaultInstallMode: "perMachine",
232235
exe: `${executableName}.exe`,
233236
icon: path.join(iconsRoot, "icon.ico"),
234237
programFilesFolderName: "Client",

‎electron/tests/forge-artifacts.test.ts‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { ForgeConfig, ForgeMakeResult, ResolvedForgeConfig } from "@electron-forge/shared-types";
22
import assert from "node:assert/strict";
3+
import { createRequire } from "node:module";
34
import { mkdir, mkdtemp, readdir, readFile, rm, writeFile } from "node:fs/promises";
45
import os from "node:os";
56
import path from "node:path";
@@ -11,6 +12,14 @@ import { MakerWix } from "@electron-forge/maker-wix";
1112
// Load the configuration with the same TypeScript loader used by Electron Forge.
1213
const configPromise = createJiti(import.meta.url).import<ForgeConfig>("../forge.config.ts", { default: true });
1314

15+
test("NSIS builder resolves the download cache API required on clean machines", () => {
16+
const require = createRequire(import.meta.url);
17+
const builderRequire = createRequire(require.resolve("app-builder-lib"));
18+
const { ElectronDownloadCacheMode, downloadArtifact } = builderRequire("@electron/get");
19+
assert.equal(typeof ElectronDownloadCacheMode?.ReadWrite, "number");
20+
assert.equal(typeof downloadArtifact, "function");
21+
});
22+
1423
test("packaged clients claim jms2 without taking the legacy client's jms scheme", async () => {
1524
const config = await configPromise;
1625
assert.deepEqual(config.packagerConfig.protocols, [{ name: "JumpServer URL", schemes: ["jms2"] }]);
@@ -31,12 +40,18 @@ test("Windows installers provide a directory selection wizard and preserve the c
3140
assert.equal(options.win.executableName, config.packagerConfig.executableName);
3241
assert.deepEqual(options.protocols, config.packagerConfig.protocols);
3342
assert.equal(options.nsis.oneClick, false);
43+
assert.equal(options.nsis.selectPerMachineByDefault, true);
44+
const installerInclude = await readFile(options.nsis.include, "utf8");
45+
assert.ok(installerInclude.includes('!define APP_FILENAME "JumpServer\\Client"'));
3446
assert.equal(options.nsis.allowToChangeInstallationDirectory, true);
3547
assert.equal(options.nsis.createDesktopShortcut, true);
3648
assert.equal(options.nsis.createStartMenuShortcut, true);
3749
assert.equal(options.nsis.runAfterFinish, true);
3850
assert.equal(options.nsis.deleteAppDataOnUninstall, false);
3951
assert.deepEqual(wix.config.ui, { chooseDirectory: true });
52+
assert.equal(wix.config.defaultInstallMode, "perMachine");
53+
assert.equal(wix.config.nestedFolderName, "JumpServer");
54+
assert.equal(wix.config.programFilesFolderName, "Client");
4055
});
4156

4257
test("normalizes release installer filenames", async (context) => {

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"author": "JumpServer",
99
"license": "MIT",
1010
"engines": {
11-
"node": ">=24"
11+
"node": ">=22.19.0"
1212
},
1313
"scripts": {
1414
"dev": "pnpm electron:dev --web",

‎pnpm-lock.yaml‎

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎pnpm-workspace.yaml‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ nodeLinker: hoisted
88

99
overrides:
1010
"@electron/rebuild": 4.2.0
11+
# builder 26.15.3 uses ElectronDownloadCacheMode, which @electron/get 3 does not export.
12+
"app-builder-lib@26.15.3>@electron/get": 5.1.0
1113
cpu-features: "-"
1214

1315
packages:

0 commit comments

Comments
 (0)