diff --git a/scripts/build-desktop-artifact.test.ts b/scripts/build-desktop-artifact.test.ts index a7bb1b9b7c4c..7386202a8d92 100644 --- a/scripts/build-desktop-artifact.test.ts +++ b/scripts/build-desktop-artifact.test.ts @@ -1218,7 +1218,7 @@ it.layer(NodeServices.layer)("build-desktop-artifact", (it) => { }).pipe(Effect.provide(ConfigProvider.layer(ConfigProvider.fromEnv({ env: {} })))), ); - it.effect("keeps executable resource editing enabled for unsigned Windows builds", () => + it.effect("configures Windows executable metadata and native signing extensions", () => Effect.gen(function* () { const config = yield* createBuildConfig( "win", @@ -1232,6 +1232,7 @@ it.layer(NodeServices.layer)("build-desktop-artifact", (it) => { const win = config.win as Record; assert.equal(win.icon, "icon.ico"); + assert.deepStrictEqual(win.signExts, [".node", ".dll"]); assert.equal(win.signAndEditExecutable, true); assert.notProperty(win, "azureSignOptions"); }).pipe(Effect.provide(ConfigProvider.layer(ConfigProvider.fromEnv({ env: {} })))), diff --git a/scripts/build-desktop-artifact.ts b/scripts/build-desktop-artifact.ts index dd8355e4c760..ea18f5500523 100644 --- a/scripts/build-desktop-artifact.ts +++ b/scripts/build-desktop-artifact.ts @@ -2189,6 +2189,10 @@ export const createBuildConfig = Effect.fn("createBuildConfig")(function* ( const winConfig: Record = { target: [target], icon: "icon.ico", + // Smart App Control validates unpacked native addons independently from + // the signed desktop executable. Extend release signing to every native + // Windows library that Electron or the server sidecar loads at runtime. + signExts: [".node", ".dll"], // Resource editing applies the product metadata and icon independently // of code signing. Disabling it for local unsigned builds leaves the // packaged executable with Electron's stock icon.