Fix: Modern Terminal blank under SYSTEM; precise reason in info list

This commit is contained in:
yuanyuanxiang
2026-05-10 17:36:46 +02:00
parent 153cbddcf6
commit 9acd141cab
3 changed files with 56 additions and 4 deletions

View File

@@ -5618,12 +5618,23 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
break;
}
case TOKEN_TERMINAL_START: { // Linux PTY 终端 (WebView2 + xterm.js)
// 检查 WebView2 和 DLL都满足则使用现代终端否则退化到经典终端
if (IsWebView2Available() && LoadTerminalModule()) {
// 三个前置条件,缺任何一个都回退到经典终端,并把原因贴到信息列表。
// SYSTEM 场景WebView2 不支持 LocalSystem token会出现"窗口能弹但页面空白"
// 显式拦截一次,避免用户误以为是 bug。
const char* fallbackReason = nullptr;
if (IsRunningAsSystem()) {
fallbackReason = "Modern Terminal does not support SYSTEM, falling back to classic";
} else if (!IsWebView2Available()) {
fallbackReason = "WebView2 Runtime not installed, falling back to classic";
} else if (!LoadTerminalModule()) {
fallbackReason = "TerminalModule.dll load failed, falling back to classic";
}
if (fallbackReason == nullptr) {
g_2015RemoteDlg->SendMessage(WM_OPENTERMINALDIALOG, 0, (LPARAM)ContextObject);
} else {
g_2015RemoteDlg->PostMessageA(WM_SHOWMESSAGE,
(WPARAM)new CharMsg("To use Modern Terminal - WebView2 and TerminalModule.dll are required"), NULL);
g_2015RemoteDlg->PostMessageA(WM_SHOWMESSAGE,
(WPARAM)new CharMsg(fallbackReason), NULL);
g_2015RemoteDlg->SendMessage(WM_OPENSHELLDIALOG, 0, (LPARAM)ContextObject);
}
break;