mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-22 00:54:26 +08:00
Introduce a per-user OOBE state model and hardened launch/elevation handling. Adds OobeStateFile/OobeLaunchDecision models, OobeStateService (persisting %LOCALAPPDATA%/.launcher/state/oobe-state.json), and LauncherExecutionContext to capture elevation and user SID. CommandContext now normalizes/infers launch-source values (normal, postinstall, apply-update, plugin-install, debug-preview) and exposes maintenance checks. LauncherFlowCoordinator propagates richer launcher context details for diagnostics and suppresses OOBE for elevated/maintenance contexts. PluginInstallerService avoids requesting elevation for user-scoped installs and returns a clear error when installation target is outside the current user's LocalAppData. LauncherClient maps and surfaces result codes, UpdateWorkflow and installer invocation now pass explicit --launch-source values, and WelcomeOobeStep persists OOBE completion via the new service. Adds unit tests (CommandContext, OobeStateService, PluginInstallerService), docs/specs/checklists for the contract, and makes internals visible to tests.
61 lines
1.6 KiB
Markdown
61 lines
1.6 KiB
Markdown
# Launcher Upgrade Spec
|
|
|
|
## Goal
|
|
|
|
Upgrade `LanMountainDesktop.Launcher` into the unified Launcher for:
|
|
|
|
- OOBE first-run entry
|
|
- startup splash window
|
|
- silent/incremental/rollback update
|
|
- plugin install/update
|
|
|
|
## Scope (Phase 1)
|
|
|
|
- Avalonia GUI launcher with two windows:
|
|
- `OOBEWindow` (first run only)
|
|
- `SplashWindow` (every launch)
|
|
- Default command `launch`
|
|
- CLI commands:
|
|
- `update check|download|apply|rollback`
|
|
- `plugin install|update`
|
|
- Legacy compatibility:
|
|
- `--source --plugins-dir --result` still works for plugin install
|
|
|
|
## Update Behavior
|
|
|
|
- ClassIsland-style deployment folders:
|
|
- `app-<version>-<number>/`
|
|
- marker files `.current`, `.partial`, `.destroy`
|
|
- Signed file map:
|
|
- `files.json`
|
|
- `files.json.sig`
|
|
- `public-key.pem`
|
|
- Incremental update:
|
|
- `replace` from archive
|
|
- `reuse` from current deployment
|
|
- `delete` skip file in target deployment
|
|
- Rollback:
|
|
- snapshot metadata is written before apply
|
|
- automatic rollback on apply failure
|
|
- manual rollback via command
|
|
|
|
## OOBE and Splash
|
|
|
|
- OOBE is independent from splash.
|
|
- OOBE shows only:
|
|
- welcome text: `欢迎使用阑山桌面`
|
|
- arrow button for continue
|
|
- Splash shows only:
|
|
- app name: `阑山桌面`
|
|
|
|
## Extensibility
|
|
|
|
- `IOobeStep` for future multi-step OOBE
|
|
- `ISplashStageReporter` for future startup progress visualization
|
|
|
|
## Compatibility Addendum
|
|
|
|
- The current production OOBE state format is a per-user JSON file at `%LOCALAPPDATA%\LanMountainDesktop\.launcher\state\oobe-state.json`.
|
|
- `first_run_completed` remains legacy compatibility data only.
|
|
- Same-user reinstall or upgrade should not re-enter OOBE.
|