feat(windows): add native MSI installer (WPB-5221) - #9722
Conversation
| } | ||
| customizedProject = customizedProject.replace( | ||
| electronBuilderOsCondition, | ||
| '<Condition Message="Windows 10 or above is required"><![CDATA[Installed OR VersionNT >= 1000]]></Condition>', |
There was a problem hiding this comment.
This prevents installation on Windows 10. Windows Installer reports VersionNT = 603 on Windows 10 for compatibility so VersionNT >= 1000 evaluates to false. We need a Windows 10+ launch condition here, for example based on WindowsBuild.
See also the official Microsoft documentation: https://learn.microsoft.com/en-us/troubleshoot/windows-client/application-management/versionnt-value-for-windows-10-server
There was a problem hiding this comment.
Good catch. Fixed in 736e10b1 with the condition “Installed OR (VersionNT >= 603 AND WindowsBuild >= 10240)”, plus a regression test. Apparently Windows 10 is 6.3 when Windows Installer asks.
| withEnv(["PATH+NODE=${NODE}", 'npm_config_target_arch=x64']) { | ||
| if (production || custom) { | ||
| bat 'yarn build:win:installer' | ||
| bat 'yarn build:win:msi -m' |
There was a problem hiding this comment.
I think we should have the MSI to be created alongside the currently created .exe installer. This replaces the existing Squirrel production build in Wrapper_Windows_Production and there is no separate production Squirrel job in Jenkins, so after this change we would stop producing new Wire-Setup.exe / .nupkg releases.
There was a problem hiding this comment.
Agreed. Fixed in a3be121c: the job now builds Squirrel and MSI from the same signed app, signs/verifies/archives both, and deploys them to separate paths. Squirrel packaging failures are fatal too, so the MSI cannot politely hide a broken existing release.
| extraMetadata: { | ||
| author: {name: windowsMsiConfig.manufacturer}, | ||
| }, | ||
| msi: { |
There was a problem hiding this comment.
I may be missing this, but I don't see a way for the MSI deployment to configure the backend URL. The according ticket explicitly calls this out so that enterprise deployments don't need to create init.json or set an environment variable manually.
Is this handled somewhere else or is the MSI configuration for the backend URL still missing?
There was a problem hiding this comment.
This was missing. Fixed in b595c110: the MSI accepts WIRE_WEBAPP_URL, stores it machine-wide, retains it across upgrades, and supports replacement or clearing. The app gives it precedence over --env and init.json, and validates it as credential-free HTTPS.
Summary
Adds a native, per-machine Windows MSI installer for enterprise deployment through MDM and software-management systems.
The existing Squirrel EXE path remains available. MSI installations deliberately do not run the application-managed Squirrel updater; enterprises update them by deploying a newer MSI with the same permanent upgrade code.
Jira: WPB-5221
What changed
electron-builderMSI build target with stable product-family upgrade codesmsiexecdeploymentwire:protocol registrationUpdate.exeValidation
git diff --checkpassmsiexec /a ... /qnsucceedsRelease checks still required
Security