Skip to content

Install Windows with setup.exe and swap the ZIP - #1005

Merged
cursor[bot] merged 2 commits into
devfrom
cursor/windows-setup-zip-update-d649
Sep 21, 2026
Merged

cursor[bot] merged 2 commits into
devfrom
cursor/windows-setup-zip-update-d649

Conversation

@zortos293

@zortos293 zortos293 commented Sep 21, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Windows first install is now setup.exe. Later updates for a user-writable tree keep the signed portable ZIP and the existing rename/restart path. An install that Windows Installer still owns is not passed to msiexec; OpenNOW reports that it must be replaced once with setup.exe.

This branch is rebased onto current dev, including the MSI INSTALL_ROOT quoting fix from #996. That quoting stays in the installer command. The in-app path returns the replacement message before msiexec runs.

setup.exe is a required Windows release artifact for x64 and arm64. Nightly assembly and candidate promotion reject a set that omits it, and they still reject missing manifests, changed checksums, tampered signatures, duplicates, and symbolic links. The old assumption of ten platform artifacts is gone: the candidate inventory is the fourteen-file platform set.

The WiX publish job, the .deb apply path, and the macOS DMG apply path are unchanged.

How the update looks

Install confirmation for OpenNOW 1.2.3

Download progress for OpenNOW 1.2.3

MSI install must be replaced with setup.exe

update-ui-surfaces.mp4

How to try it

First install:

  1. On Windows, build or download OpenNOW-Qt-<version>-Windows-<arch>-setup.exe from the release job (it is produced from the portable ZIP by opennow-qt/packaging/windows/build-setup.ps1).
  2. Run setup.exe. It copies the portable layout to %LOCALAPPDATA%\OpenNOW, with shortcuts aimed at bin\OpenNOW.exe. It does not register an MSI product. User data stays in %APPDATA%\OpenNOW.
  3. If an older OpenNOW MSI is registered, the installer offers to uninstall that product first. Decline and the old tree stays registered; the in-app updater will not run msiexec for it.

Update:

  1. Launch the copy installed by setup.exe (the tree is not MSI-registered).
  2. Open Updates, check for a newer signed release, download it, and confirm install.
  3. The core selects OpenNOW-Qt-<version>-Windows-<arch>.zip. The helper renames the live tree to previous, puts the new tree in its place, and restarts. OpenNOW.exe, opennow-core.exe, and opennow-update-helper.exe all move together. If the new process does not acknowledge startup, the previous tree is restored.

MSI-registered install:

  1. Launch a copy that Windows Installer still owns.
  2. Open Updates. The message says this installation is registered with Windows Installer and must be replaced once with setup.exe. Download and install stay unavailable, and msiexec is not started.

Left for a later PR

Removing the WiX publish job, InstallKind::WindowsMsi, and the deb/DMG apply code. Linux, macOS, Flatpak, signing keys, and the updater.* protocol are unchanged in this slice.

Tests

  • cargo test --manifest-path native/opennow-core/Cargo.toml --lib update_apply::tests:: (34 passed), including the prepared ZIP swap and the refusal to apply an MSI.
  • cargo test --manifest-path native/opennow-core/Cargo.toml --lib update_apply::managed:: including msi_install_root_quotes_only_the_value_for_msiexec.
  • cargo test --manifest-path native/opennow-core/Cargo.toml --bin opennow-core updater:: (29 passed), including terminal transaction cleanup.
  • python3 -m unittest for test_candidate_promotion, test_macos_release, test_nightly_release, test_signed_nightly_release, test_stable_release, test_supporter_build, test_windows_setup, test_ci_release_trust, and test_ci_workflow.

To show artifacts inline, enable in settings.

Open in Web Open in Cursor 

@coderabbitai

coderabbitai Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: e84b1e3d-224b-419a-96e8-b7922acc5c38

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

New installs copy the portable tree to %LOCALAPPDATA%\OpenNOW without an MSI product. Later updates keep the signed ZIP rename path. An MSI-registered tree is told to replace itself once with setup.exe and is not handed to msiexec.

Co-authored-by: Zortos <zortosdev@proton.me>
@cursor
cursor Bot force-pushed the cursor/windows-setup-zip-update-d649 branch from 02866b4 to 85b6da1 Compare September 21, 2026 18:03
@blacksmith-sh

This comment has been minimized.

The candidate inventory already publishes Windows setup.exe, so nightly
assembly and promotion must treat those files as required packages.
Signature and checksum checks stay exact; only the frozen counts of ten
and twelve platform artifacts change.

Co-authored-by: Zortos <zortosdev@proton.me>
@cursor
cursor Bot merged commit d773297 into dev Sep 21, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants