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.
1.6 KiB
1.6 KiB
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|rollbackplugin install|update
- Legacy compatibility:
--source --plugins-dir --resultstill works for plugin install
Update Behavior
- ClassIsland-style deployment folders:
app-<version>-<number>/- marker files
.current,.partial,.destroy
- Signed file map:
files.jsonfiles.json.sigpublic-key.pem
- Incremental update:
replacefrom archivereusefrom current deploymentdeleteskip 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
- welcome text:
- Splash shows only:
- app name:
阑山桌面
- app name:
Extensibility
IOobeStepfor future multi-step OOBEISplashStageReporterfor 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_completedremains legacy compatibility data only.- Same-user reinstall or upgrade should not re-enter OOBE.