Files
craft-launcher/crates/native
Jeremy b827fed74a feat(install): one permission prompt for an Update all of all-users apps on Windows (#974)
* feat(install): one permission prompt for an Update all of all-users apps

Updates of apps installed for all users wait until each has downloaded and
checked its package, then run in one elevated PowerShell session: one UAC
prompt for the batch. A batch of one keeps the direct msiexec route. If
PowerShell cannot start, each package runs with its own prompt.

* fix(review): keep each checked package unchangeable until its batch runs; fall back when the batch is too long

The batch's permission prompt names PowerShell, not the package's publisher, so a
package swapped in the download folder between its check and the elevated
msiexec would go unnoticed (CWE-367). Each all-users package is now opened
sharing only reading, checked again through that handle against the checksum it
was downloaded against, and held until its call ends.

A batch whose script is too long for one command line now updates each app with
its own prompt instead of failing every job.

* fix(review): a shared-run failure says "in one go", not "together"

The fallback runs each package by itself but still gives the run one result, so
"handling 3 apps together" was wrong there. The marker the backend uses to check
what landed is unchanged in role; only its wording.

* fix(review): a failed launch of the elevated session falls back instead of cancelling

The outer script read every Start-Process failure as a declined prompt, so a
session that could not start cancelled the whole batch. A declined prompt
carries the Windows error 1223 in its exception chain; only that is a cancel.
Anything else exits with a code no msiexec run returns, and the launcher then
updates each app with its own prompt.
2026-10-29 00:05:28 -04:00
..