🐛 fix(windows): 修复在线更新挂起与 WebView2 启动闪退

- 隐藏并释放 Windows 更新脚本进程,避免在线更新打开 cmd 并挂起
- 为更新脚本等待宿主进程退出增加超时保护
- 收窄自动 WebView2 zoom reset 触发条件并补充异常兜底
- 补充 Windows 更新启动与窗口缩放回归测试
Refs #468
This commit is contained in:
Syngnat
2026-05-16 22:13:24 +08:00
parent 6c36bd0a08
commit 0cde96844d
11 changed files with 119 additions and 7 deletions

View File

@@ -4,6 +4,7 @@ import {
resolveTitleBarToggleIconKey,
resolveWindowsScaleCheckDelayMs,
shouldApplyWindowsScaleFix,
shouldResetWebViewZoomForScaleFix,
shouldToggleMaximisedWindowForScaleFix,
} from './windowStateUi';
@@ -26,6 +27,13 @@ describe('windowStateUi', () => {
expect(shouldToggleMaximisedWindowForScaleFix('restore', true)).toBe(false);
});
it('only calls the backend WebView2 zoom reset after a real restore drift', () => {
expect(shouldResetWebViewZoomForScaleFix('restore', true)).toBe(true);
expect(shouldResetWebViewZoomForScaleFix('restore', false)).toBe(false);
expect(shouldResetWebViewZoomForScaleFix('activation', true)).toBe(false);
expect(shouldResetWebViewZoomForScaleFix('ratio-change', true)).toBe(false);
});
it('debounces resize-triggered Windows scale checks until window transitions settle', () => {
expect(resolveWindowsScaleCheckDelayMs('resize')).toBeGreaterThan(0);
expect(resolveWindowsScaleCheckDelayMs('focus')).toBe(0);

View File

@@ -20,6 +20,11 @@ export const shouldToggleMaximisedWindowForScaleFix = (
hasViewportScaleDrift: boolean,
): boolean => reason === 'ratio-change' && hasViewportScaleDrift;
export const shouldResetWebViewZoomForScaleFix = (
reason: WindowScaleFixReason,
hasViewportScaleDrift: boolean,
): boolean => reason === 'restore' && hasViewportScaleDrift;
export const resolveWindowsScaleCheckDelayMs = (trigger: WindowsScaleCheckTrigger): number =>
trigger === 'resize' ? 240 : 0;