diff --git a/apps/desktop/resources/installer.nsh b/apps/desktop/resources/installer.nsh new file mode 100644 index 000000000000..092f641c3359 --- /dev/null +++ b/apps/desktop/resources/installer.nsh @@ -0,0 +1,10 @@ +!macro customInstall + !ifndef DO_NOT_CREATE_START_MENU_SHORTCUT + ${IfNot} ${FileExists} "$newStartMenuLink" + !insertmacro createMenuDirectory + CreateShortCut "$newStartMenuLink" "$appExe" "" "$appExe" 0 "" "" "${APP_DESCRIPTION}" + ClearErrors + WinShell::SetLnkAUMI "$newStartMenuLink" "${APP_ID}" + ${EndIf} + !endif +!macroend diff --git a/scripts/build-desktop-artifact.test.ts b/scripts/build-desktop-artifact.test.ts index b7383de236aa..4351d4b7d8a6 100644 --- a/scripts/build-desktop-artifact.test.ts +++ b/scripts/build-desktop-artifact.test.ts @@ -451,7 +451,10 @@ it.layer(NodeServices.layer)("build-desktop-artifact", (it) => { }, ...WINDOWS_SERVER_EXTRA_RESOURCES, ]); - assert.deepStrictEqual(win.nsis, { differentialPackage: true }); + assert.deepStrictEqual(win.nsis, { + differentialPackage: true, + include: "apps/desktop/resources/installer.nsh", + }); // Native binaries and helper executables cannot load from inside an // asar; everything else stays packed. The Claude SDK platform packages // and .bin shims never ship. diff --git a/scripts/build-desktop-artifact.ts b/scripts/build-desktop-artifact.ts index bf36029bc75b..85039aad2888 100644 --- a/scripts/build-desktop-artifact.ts +++ b/scripts/build-desktop-artifact.ts @@ -2135,7 +2135,10 @@ export const createBuildConfig = Effect.fn("createBuildConfig")(function* ( // Keep blockmap-based differential downloads enabled while changing the // installed file topology. The optimization is in the payload shape, not // in trading update bandwidth for install speed. - buildConfig.nsis = { differentialPackage: true }; + buildConfig.nsis = { + differentialPackage: true, + include: "apps/desktop/resources/installer.nsh", + }; const winConfig: Record = { target: [target], icon: "icon.ico",