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.
12 KiB
鏁呴殰鎺掗櫎鎸囧崡
LanMountainDesktop 甯歌<E794AF>闂<EFBFBD><E99782>鍜岃В鍐虫柟妗<E69F9F>
鐩<EFBFBD>綍
- 鏋勫缓闂<EFBFBD><EFBFBD>
- [杩愯<E69DA9>鏃堕棶棰榏(#杩愯<E69DA9>鏃堕棶棰<E6A3B6>)
- Launcher 闂<><E99782>
- 鏇存柊闂<EFBFBD><EFBFBD>
- 鎻掍欢闂<EFBFBD><EFBFBD>
- 鎬ц兘闂<EFBFBD><EFBFBD>
- 骞冲彴鐗瑰畾闂<EFBFBD><EFBFBD>
鏋勫缓闂<EFBFBD><EFBFBD>
闂<EFBFBD><EFBFBD>: 缂栬瘧閿欒<E996BF> - 鎵句笉鍒<E7AC89> Windows.Win32 鍛藉悕绌洪棿
鐥囩姸:
error CS0246: The type or namespace name 'Windows' could not be found
鍘熷洜: CsWin32 灏氭湭鐢熸垚 P/Invoke 浠g爜
瑙e喅鏂规<EFBFBD>:
# 娓呯悊骞堕噸鏂版瀯寤<E780AF>
dotnet clean
dotnet restore
dotnet build
棣栨<EFBFBD>鏋勫缓鏃<EFBFBD> CsWin32 浼氳嚜鍔ㄧ敓鎴愪唬鐮<E594AC>,绗<>簩娆℃瀯寤哄簲璇ユ垚鍔熴€<E786B4>
闂<EFBFBD><EFBFBD>: NuGet 鍖呰繕鍘熷け璐<E38191>
鐥囩姸:
error NU1102: Unable to find package 'XXX' with version (>= X.X.X)
瑙e喅鏂规<EFBFBD>:
# 娓呯悊 NuGet 缂撳瓨
dotnet nuget locals all --clear
# 寮哄埗杩樺師
dotnet restore --force
# 閲嶆柊鏋勫缓
dotnet build
闂<EFBFBD><EFBFBD>: 鏋勫缓鏃舵彁绀<E5BD81> SDK 鐗堟湰涓嶅尮閰<E5B0AE>
鐥囩姸:
error NETSDK1045: The current .NET SDK does not support targeting .NET 10.0
瑙e喅鏂规<EFBFBD>:
# 妫€鏌ュ綋鍓<E7B68B> SDK 鐗堟湰
dotnet --version
# 搴旇<E690B4>鏄剧ず 10.x.x
# 濡傛灉涓嶆槸,璇峰畨瑁<E795A8> .NET 10 SDK
涓嬭浇鍦板潃: https://dotnet.microsoft.com/download/dotnet/10.0
闂<EFBFBD><EFBFBD>: Avalonia 璁捐<E79281>鍣ㄦ棤娉曞姞杞<E5A79E>
鐥囩姸: XAML 棰勮<E6A3B0>鏄剧ず閿欒<E996BF>鎴栫┖鐧<E29496>
瑙e喅鏂规<EFBFBD>:
- 閲嶅惎 IDE
- 娓呯悊骞堕噸鏂版瀯寤洪」鐩<EFBFBD>
- 妫€鏌<EFBFBD> Avalonia 鐗堟湰鏄<E6B9B0>惁涓€鑷<E282AC>
dotnet clean
dotnet build
杩愯<EFBFBD>鏃堕棶棰<EFBFBD>
闂<EFBFBD><EFBFBD>: 搴旂敤鍚<E695A4>姩鍚庣珛鍗冲穿婧<E7A9BF>
璇婃柇姝ラ<EFBFBD>:
- 妫€鏌ユ棩蹇楁枃浠<EFBFBD>:
Windows: %LOCALAPPDATA%\LanMountainDesktop\logs\
Linux: ~/.local/share/LanMountainDesktop/logs/
macOS: ~/Library/Application Support/LanMountainDesktop/logs/
- 浠ヨ皟璇曟ā寮忚繍琛<EFBFBD>:
dotnet run --project LanMountainDesktop/LanMountainDesktop.csproj
- 妫€鏌ヤ緷璧<EFBFBD>:
# Windows: 纭<>繚瀹夎<E780B9>浜<EFBFBD> .NET 10 Desktop Runtime
# Linux: 纭<>繚瀹夎<E780B9>浜嗗繀瑕佺殑鍥惧舰搴<E888B0>
闂<EFBFBD><EFBFBD>: 绐楀彛鏃犳硶鏄剧ず鎴栭粦灞<E7B2A6>
鍙<EFBFBD>兘鍘熷洜:
- 鏄惧崱椹卞姩闂<EFBFBD><EFBFBD>
- 娓叉煋妯″紡涓嶅吋瀹<EFBFBD>
瑙e喅鏂规<EFBFBD>:
- 鍒囨崲娓叉煋妯″紡 (缂栬緫閰嶇疆鏂囦欢):
{
"Win32RenderingMode": 1 // 灏濊瘯涓嶅悓鐨勫€<E58BAB>: 0, 1, 2, 3, 4
}
- 绂佺敤纭<EFBFBD>欢鍔犻€<EFBFBD>:
# 璁剧疆鐜<E79686><E9909C>鍙橀噺
set AVALONIA_RENDERING_MODE=Software
闂<EFBFBD><EFBFBD>: 鍗曞疄渚嬮攣瀹氬け璐<E38191>
鐥囩姸: 鎻愮ず"搴旂敤宸插湪杩愯<E69DA9>"浣嗗疄闄呮病鏈<E79785>
瑙e喅鏂规<EFBFBD>:
# Windows
taskkill /F /IM LanMountainDesktop.exe
# Linux/macOS
pkill -9 LanMountainDesktop
濡傛灉闂<EFBFBD><EFBFBD>鎸佺画,鍒犻櫎閿佹枃浠<E69E83>:
Windows: %TEMP%\LanMountainDesktop.lock
Linux: /tmp/LanMountainDesktop.lock
macOS: /tmp/LanMountainDesktop.lock
闂<EFBFBD><EFBFBD>: 璁剧疆鏃犳硶淇濆瓨
鐥囩姸: 淇<>敼璁剧疆鍚庨噸鍚<E599B8>簲鐢<E7B0B2>,璁剧疆鎭㈠<E98EAD>榛樿<E6A69B>
璇婃柇:
# 妫€鏌ヨ<E98F8C>缃<EFBFBD>枃浠舵槸鍚﹀瓨鍦<E793A8>
# Windows: %LOCALAPPDATA%\LanMountainDesktop\settings.json
# Linux: ~/.local/share/LanMountainDesktop/settings.json
# macOS: ~/Library/Application Support/LanMountainDesktop/settings.json
瑙e喅鏂规<EFBFBD>:
- 妫€鏌ユ枃浠舵潈闄<EFBFBD>
- 妫€鏌ョ<EFBFBD>鐩樼┖闂<EFBFBD>
- 鍒犻櫎鎹熷潖鐨勮<EFBFBD>缃<EFBFBD>枃浠<EFBFBD> (浼氶噸缃<E599B8>负榛樿<E6A69B>)
Launcher 闂<><E99782>
闂<EFBFBD><EFBFBD>: Launcher 鎵句笉鍒颁富绋嬪簭
鐥囩姸:
鎵句笉鍒版湁鏁堢殑 LanMountainDesktop 鐗堟湰锛屽彲鑳芥槸瀹夎<E780B9>宸叉崯鍧忋€<E5BF8B>
璇婃柇:
# 妫€鏌ョ洰褰曠粨鏋<E7B2A8>
ls "C:\Program Files\LanMountainDesktop\"
# 搴旇<E690B4>鐪嬪埌:
# - LanMountainDesktop.Launcher.exe
# - app-{version}/
瑙e喅鏂规<EFBFBD>:
- 妫€鏌<EFBFBD> app- 鐩<>綍鏄<E7B68D>惁瀛樺湪:*
ls "C:\Program Files\LanMountainDesktop\app-*"
- 妫€鏌ヤ富绋嬪簭鏄<EFBFBD>惁瀛樺湪:
ls "C:\Program Files\LanMountainDesktop\app-{version}\LanMountainDesktop.exe"
- 閲嶆柊瀹夎<EFBFBD>搴旂敤
闂<EFBFBD><EFBFBD>: OOBE 绐楀彛閲嶅<E996B2>鍑虹幇
鐥囩姸: 姣忔<E5A7A3>鍚<EFBFBD>姩閮芥樉绀烘<E7BB80>杩庨〉闈<E38089>
鍘熷洜: OOBE 瀹屾垚鏍囪<E98F8D>鏂囦欢涓㈠け鎴栨棤娉曞垱寤<E59EB1>
瑙e喅鏂规<EFBFBD>:
# 鎵嬪姩鍒涘缓鏍囪<E98F8D>鏂囦欢
# Windows:
New-Item -ItemType File -Path "$env:LOCALAPPDATA\LanMountainDesktop\.launcher\state\first_run_completed"
# Linux/macOS:
mkdir -p ~/.local/share/LanMountainDesktop/.launcher/state
touch ~/.local/share/LanMountainDesktop/.launcher/state/first_run_completed
闂<EFBFBD><EFBFBD>: Splash 绐楀彛鍗′綇涓嶆秷澶<E7A7B7>
鐥囩姸: 鍚<>姩鍔ㄧ敾涓€鐩存樉绀<E6A889>,涓荤▼搴忔棤娉曞惎鍔<E6838E>
璇婃柇:
# 妫€鏌ヤ富绋嬪簭鏄<E7B0AD>惁鍚<E68381>姩
# Windows:
tasklist | findstr LanMountainDesktop
# Linux/macOS:
ps aux | grep LanMountainDesktop
瑙e喅鏂规<EFBFBD>:
- 寮哄埗鍏抽棴 Launcher
- 鐩存帴杩愯<EFBFBD>涓荤▼搴忔祴璇<EFBFBD>:
"C:\Program Files\LanMountainDesktop\app-{version}\LanMountainDesktop.exe"
- 妫€鏌ユ棩蹇楁枃浠<EFBFBD>
鏇存柊闂<EFBFBD><EFBFBD>
闂<EFBFBD><EFBFBD>: 鏇存柊涓嬭浇澶辫触
鐥囩姸:
Failed to download update: The remote server returned an error
鍙<EFBFBD>兘鍘熷洜:
- 缃戠粶杩炴帴闂<EFBFBD><EFBFBD>
- GitHub API 闄愭祦
- 浠g悊璁剧疆闂<EFBFBD><EFBFBD>
瑙e喅鏂规<EFBFBD>:
- 妫€鏌ョ綉缁滆繛鎺<EFBFBD>:
# 娴嬭瘯 GitHub 杩炴帴
curl https://api.github.com/repos/YourOrg/LanMountainDesktop/releases/latest
- 閰嶇疆浠g悊 (濡傛灉闇€瑕<E282AC>):
# 璁剧疆鐜<E79686><E9909C>鍙橀噺
set HTTP_PROXY=http://proxy.example.com:8080
set HTTPS_PROXY=http://proxy.example.com:8080
- 鎵嬪姩涓嬭浇鏇存柊:
- 璁块棶 GitHub Releases 椤甸潰
- 涓嬭浇瀹夎<EFBFBD>鍖<EFBFBD>
- 閲嶆柊瀹夎<EFBFBD>
闂<EFBFBD><EFBFBD>: 鏇存柊绛惧悕楠岃瘉澶辫触
鐥囩姸:
Signature verification failed
鍘熷洜:
- 鏂囦欢鎹熷潖
- 鍏<EFBFBD>挜涓嶅尮閰<EFBFBD>
- 鏂囦欢琚<EFBFBD><EFBFBD>鏀<EFBFBD>
瑙e喅鏂规<EFBFBD>:
- 鍒犻櫎鎹熷潖鐨勬洿鏂版枃浠<EFBFBD>:
# Windows:
Remove-Item "$env:LOCALAPPDATA\LanMountainDesktop\.launcher\update\incoming\*"
# Linux/macOS:
rm -rf ~/.local/share/LanMountainDesktop/.launcher/update/incoming/*
-
閲嶆柊涓嬭浇鏇存柊
-
濡傛灉闂<EFBFBD><EFBFBD>鎸佺画,閲嶆柊瀹夎<E780B9>搴旂敤
闂<EFBFBD><EFBFBD>: 鏇存柊鍚庡簲鐢ㄦ棤娉曞惎鍔<E6838E>
鐥囩姸: 鏇存柊瀹屾垚鍚<E59E9A>,搴旂敤鍚<E695A4>姩澶辫触鎴栧穿婧<E7A9BF>
瑙e喅鏂规<EFBFBD>:
- 鐗堟湰鍥為€€:
LanMountainDesktop.Launcher.exe update rollback
- 妫€鏌ユ洿鏂板揩鐓<EFBFBD>:
# Windows:
ls "$env:LOCALAPPDATA\LanMountainDesktop\.launcher\snapshots\"
# 鏌ョ湅蹇<E6B985>収鍐呭<E98D90>
cat "$env:LOCALAPPDATA\LanMountainDesktop\.launcher\snapshots\{snapshot-id}.json"
- 鎵嬪姩鍒囨崲鐗堟湰:
# 鍒犻櫎鏂扮増鏈<E5A297>殑 .current 鏍囪<E98F8D>
Remove-Item "C:\Program Files\LanMountainDesktop\app-{new}\\.current"
# 娣诲姞 .current 鍒版棫鐗堟湰
New-Item -ItemType File -Path "C:\Program Files\LanMountainDesktop\app-{old}\\.current"
闂<EFBFBD><EFBFBD>: 澧為噺鏇存柊鏂囦欢鍝堝笇涓嶅尮閰<E5B0AE>
鐥囩姸:
File hash mismatch for 'XXX.dll'
鍘熷洜:
- 鏂囦欢涓嬭浇涓嶅畬鏁<EFBFBD>
- 鏂囦欢鎹熷潖
瑙e喅鏂规<EFBFBD>:
- 鍒犻櫎閮ㄥ垎涓嬭浇鐨勬洿鏂<EFBFBD>:
# 鍒犻櫎鏍囪<E98F8D>涓<EFBFBD> .partial 鐨勭洰褰<E6B4B0>
Remove-Item "C:\Program Files\LanMountainDesktop\app-*" -Recurse -Force -Include *.partial
- 娓呯悊鏇存柊缂撳瓨:
Remove-Item "$env:LOCALAPPDATA\LanMountainDesktop\.launcher\update\incoming\*"
- 閲嶆柊涓嬭浇鏇存柊
鎻掍欢闂<EFBFBD><EFBFBD>
闂<EFBFBD><EFBFBD>: 鎻掍欢鏃犳硶鍔犺浇
鐥囩姸: 鎻掍欢鍒楄〃涓<E38083>湅涓嶅埌宸插畨瑁呯殑鎻掍欢
璇婃柇:
# 妫€鏌ユ彃浠剁洰褰<E6B4B0>
ls "C:\Program Files\LanMountainDesktop\plugins\"
# 妫€鏌ユ彃浠舵竻鍗<E7ABBB>
cat "C:\Program Files\LanMountainDesktop\plugins\{plugin-id}\plugin.json"
瑙e喅鏂规<EFBFBD>:
- 妫€鏌ユ彃浠跺吋瀹规€<EFBFBD>:
- 鎻掍欢 SDK 鐗堟湰鏄<E6B9B0>惁鍖归厤
- 鎻掍欢鏄<EFBFBD>惁鏀<EFBFBD>寔褰撳墠骞冲彴
- 閲嶆柊瀹夎<EFBFBD>鎻掍欢:
LanMountainDesktop.Launcher.exe plugin install <path-to-plugin.laapp>
- 妫€鏌ユ棩蹇楁枃浠<EFBFBD> 鏌ョ湅鎻掍欢鍔犺浇閿欒<E996BF>
闂<EFBFBD><EFBFBD>: 鎻掍欢瀹夎<E780B9>澶辫触
鐥囩姸:
Failed to install plugin: Invalid package format
鍙<EFBFBD>兘鍘熷洜:
.laapp鏂囦欢鎹熷潖- 鎻掍欢鍖呮牸寮忎笉姝g‘
- 鏉冮檺涓嶈冻
瑙e喅鏂规<EFBFBD>:
- 楠岃瘉鎻掍欢鍖<EFBFBD>:
# .laapp 瀹為檯涓婃槸 ZIP 鏂囦欢
unzip -t plugin.laapp
- 妫€鏌ユ潈闄<EFBFBD>:
# 浠ョ<E6B5A0>鐞嗗憳韬<E686B3>唤杩愯<E69DA9> Launcher
- 鎵嬪姩瑙e帇瀹夎<EFBFBD>:
# 瑙e帇鍒版彃浠剁洰褰<E6B4B0>
unzip plugin.laapp -d "C:\Program Files\LanMountainDesktop\plugins\{plugin-id}"
闂<EFBFBD><EFBFBD>: 鎻掍欢鏇存柊澶辫触
鐥囩姸: 鎻掍欢鍗囩骇闃熷垪澶勭悊澶辫触
瑙e喅鏂规<EFBFBD>:
- 娓呯悊鍗囩骇闃熷垪:
Remove-Item "$env:LOCALAPPDATA\LanMountainDesktop\.launcher\plugin-upgrades\*"
- 鎵嬪姩鏇存柊鎻掍欢:
- 鍗歌浇鏃х増鏈<EFBFBD>
- 瀹夎<EFBFBD>鏂扮増鏈<EFBFBD>
鎬ц兘闂<EFBFBD><EFBFBD>
闂<EFBFBD><EFBFBD>: CPU 鍗犵敤杩囬珮
鍙<EFBFBD>兘鍘熷洜:
- 娓叉煋妯″紡涓嶅綋
- 缁勪欢鏇存柊棰戠巼杩囬珮
- 鍐呭瓨娉勬紡
璇婃柇:
# Windows: 浣跨敤浠诲姟绠$悊鍣ㄦ煡鐪嬭<E990AA>缁嗕俊鎭<E4BF8A>
# Linux: top 鎴<> htop
# macOS: Activity Monitor
瑙e喅鏂规<EFBFBD>:
-
鍒囨崲娓叉煋妯″紡 (鍙傝<E98D99>"绐楀彛鏃犳硶鏄剧ず"閮ㄥ垎)
-
绂佺敤涓嶅繀瑕佺殑缁勪欢:
- 鍑忓皯妗岄潰缁勪欢鏁伴噺
- 闄嶄綆缁勪欢鏇存柊棰戠巼
- 妫€鏌ユ槸鍚︽湁姝诲惊鐜<EFBFBD>垨璧勬簮娉勬紡
闂<EFBFBD><EFBFBD>: 鍐呭瓨鍗犵敤杩囬珮
璇婃柇:
# 妫€鏌ュ唴瀛樹娇鐢ㄦ儏鍐<E5848F>
# Windows: 浠诲姟绠$悊鍣<E6828A>
# Linux: free -h
# macOS: Activity Monitor
瑙e喅鏂规<EFBFBD>:
-
閲嶅惎搴旂敤
-
鍑忓皯缁勪欢鏁伴噺
-
妫€鏌ユ彃浠舵槸鍚︽湁鍐呭瓨娉勬紡
-
鏇存柊鍒版渶鏂扮増鏈<EFBFBD> (鍙<>兘鍖呭惈鍐呭瓨浼樺寲)
闂<EFBFBD><EFBFBD>: 鍚<>姩閫熷害鎱<E5AEB3>
鍙<EFBFBD>兘鍘熷洜:
- 鎻掍欢杩囧<EFBFBD>
- 纾佺洏 I/O 鎱<>
- 棣栨<EFBFBD>鍚<EFBFBD>姩闇€瑕佸垵濮嬪寲
瑙e喅鏂规<EFBFBD>:
-
绂佺敤涓嶅繀瑕佺殑鎻掍欢
-
浣跨敤 SSD
-
娓呯悊缂撳瓨:
Remove-Item "$env:LOCALAPPDATA\LanMountainDesktop\cache\*" -Recurse
骞冲彴鐗瑰畾闂<EFBFBD><EFBFBD>
Windows
闂<EFBFBD><EFBFBD>: WebView2 缂哄け
鐥囩姸:
Microsoft Edge WebView2 Runtime is required
瑙e喅鏂规<EFBFBD>:
-
涓嬭浇骞跺畨瑁<EFBFBD> WebView2 Runtime: https://go.microsoft.com/fwlink/p/?LinkId=2124703
-
鎴栦娇鐢ㄥ畨瑁呭寘鑷<EFBFBD>姩瀹夎<EFBFBD>
闂<EFBFBD><EFBFBD>: 涓庣獥鍙g編鍖栧伐鍏峰啿绐<E595BF>
鐥囩姸: 绐楀彛鏄剧ず寮傚父銆佸穿婧<E7A9BF>
宸茬煡鍐茬獊宸ュ叿:
- Mica For Everyone
- TranslucentTB
- 鍏朵粬淇<EFBFBD>敼绐楀彛鏉愯川鐨勫伐鍏<EFBFBD>
瑙e喅鏂规<EFBFBD>: 灏<> LanMountainDesktop 娣诲姞鍒拌繖浜涘伐鍏风殑鎺掗櫎鍒楄〃涓<E38083>€<EFBFBD>
Linux
闂<EFBFBD><EFBFBD>: 缂哄皯鍥惧舰搴撲緷璧<E7B7B7>
鐥囩姸:
error while loading shared libraries: libXXX.so
瑙e喅鏂规<EFBFBD>:
Debian/Ubuntu:
sudo apt install libx11-6 libice6 libsm6 libfontconfig1
Fedora/RHEL:
sudo dnf install libX11 libICE libSM fontconfig
Arch Linux:
sudo pacman -S libx11 libice libsm fontconfig
闂<EFBFBD><EFBFBD>: Wayland 鍏煎<E98D8F>鎬<EFBFBD>
鐥囩姸: 鍦<> Wayland 涓嬭繍琛屽紓甯<E7B493>
瑙e喅鏂规<EFBFBD>:
# 寮哄埗浣跨敤 X11
export GDK_BACKEND=x11
./LanMountainDesktop.Launcher
鎴栭€氳繃 XWayland 杩愯<E69DA9> (涓嶄繚璇佹墍鏈夊姛鑳芥<E991B3>甯<EFBFBD>)銆<>
macOS
闂<EFBFBD><EFBFBD>: 搴旂敤鏃犳硶鎵撳紑 - "鏉ヨ嚜韬<E59A9C>唤涓嶆槑鐨勫紑鍙戣€<E688A3>"
瑙e喅鏂规<EFBFBD>:
# 绉婚櫎闅旂<E99785>灞炴€<E782B4>
xattr -cr /Applications/LanMountainDesktop.app
鎴栧湪"绯荤粺鍋忓ソ璁剧疆" > "瀹夊叏鎬т笌闅愮<E99785>"涓<>厑璁搞€<E6909E>
闂<EFBFBD><EFBFBD>: 鏉冮檺闂<E6AABA><E99782>
鐥囩姸: 鏃犳硶璁块棶鏌愪簺鐩<E7B0BA>綍鎴栧姛鑳<E5A79B>
瑙e喅鏂规<EFBFBD>: 鍦<>"绯荤粺鍋忓ソ璁剧疆" > "瀹夊叏鎬т笌闅愮<E99785>" > "闅愮<E99785>"涓<>巿浜堝繀瑕佹潈闄<E6BD88>:
- 鏂囦欢鍜屾枃浠跺す
- 杈呭姪鍔熻兘 (濡傛灉闇€瑕<E282AC>)
鑾峰彇甯<EFBFBD>姪
濡傛灉浠ヤ笂鏂规<EFBFBD>閮芥棤娉曡В鍐抽棶棰<EFBFBD>:
- 鏌ョ湅鏃ュ織鏂囦欢 (鍖呭惈璇︾粏閿欒<E996BF>淇℃伅)
- 鎼滅储 GitHub Issues - 鍙<>兘宸叉湁瑙e喅鏂规<E98F82>
- 鎻愪氦鏂<EFBFBD> Issue - 鍖呭惈:
- 鎿嶄綔绯荤粺鍜岀増鏈<EFBFBD>
- 搴旂敤鐗堟湰
- 璇︾粏閿欒<EFBFBD>淇℃伅
- 閲嶇幇姝ラ<EFBFBD>
- 鏃ュ織鏂囦欢 (濡傛灉鐩稿叧)
GitHub Issues: https://github.com/YourOrg/LanMountainDesktop/issues
鐩稿叧鏂囨。
- [寮€鍙戞枃妗<E69E83>(DEVELOPMENT.md)
- Launcher 鏋舵瀯
- 鏇存柊绯荤粺
- [鏋勫缓鍜岄儴缃瞉(BUILD_AND_DEPLOY.md)
问题: OOBE 窗口重复出现
原因: OOBE 完成标记丢失、损坏,或者旧版标记文件只作为迁移兼容而不是主状态源。
当前权威状态路径:
Windows: %LOCALAPPDATA%\LanMountainDesktop\.launcher\state\oobe-state.json
处理原则:
- 同一 Windows 用户重装或升级后,默认不应该再次进入 OOBE。
first_run_completed只保留为兼容迁移数据。- 如果状态文件不可读,Launcher 应优先保证稳定启动并记录
oobe_state_unavailable,不要反复把用户拉回 OOBE。
问题: 启动或插件安装意外弹出管理员权限
原因: 某些路径显式请求了 runas,或者流程把默认用户目录误判成需要提权。
当前允许提权的白名单:
- 安装器本体
- 全量安装包更新应用
- 用户显式确认的 legacy uninstall
不应弹 UAC 的场景:
- 普通冷启动
- OOBE
- 检查更新
- 增量下载
- 默认插件安装到用户 LocalAppData 路径
调试建议:
- 检查日志中的
launchSource、isElevated、oobeStateStatus、oobeSuppressionReason - 检查插件安装目标是否仍在
%LOCALAPPDATA%\LanMountainDesktop下 - 确认没有额外的
Verb = "runas"被引入默认路径