mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 23: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.
31 lines
886 B
C#
31 lines
886 B
C#
using System.Security.Principal;
|
|
using LanMountainDesktop.Launcher.Models;
|
|
|
|
namespace LanMountainDesktop.Launcher.Services;
|
|
|
|
internal static class LauncherExecutionContext
|
|
{
|
|
public static LauncherExecutionSnapshot Capture()
|
|
{
|
|
var userName = Environment.UserName ?? string.Empty;
|
|
if (!OperatingSystem.IsWindows())
|
|
{
|
|
return new LauncherExecutionSnapshot(false, userName, null);
|
|
}
|
|
|
|
try
|
|
{
|
|
using var identity = WindowsIdentity.GetCurrent();
|
|
var principal = new WindowsPrincipal(identity);
|
|
return new LauncherExecutionSnapshot(
|
|
principal.IsInRole(WindowsBuiltInRole.Administrator),
|
|
userName,
|
|
identity.User?.Value);
|
|
}
|
|
catch
|
|
{
|
|
return new LauncherExecutionSnapshot(false, userName, null);
|
|
}
|
|
}
|
|
}
|