Skip to content

Commit e9a84dc

Browse files
committed
fix(launcher): 修复管理员兼容模式下的版本检测
1 parent 84ed14c commit e9a84dc

2 files changed

Lines changed: 9 additions & 1 deletion

File tree

docs/develop/one_dragon/runtime_launcher.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,8 @@ CI 构建生成以下集成启动器相关产物:
161161
2. 创建新的版本检查器(指向对应的 exe 文件)
162162
3. 重置版本状态并触发重新检查
163163

164+
版本检查会调用所选启动器的 `--version` 参数。若用户通过 Windows 兼容性设置强制启动器以管理员身份运行,版本查询会临时使用普通权限,避免系统提权拦截导致界面误报“未安装”;这个设置只影响版本查询,不改变用户正常启动启动器时的权限
165+
164166
下载时的备份/回滚机制:
165167
- 下载前将当前 exe 重命名为 `.bak`(集成启动器还会重命名 `.runtime``.runtime.bak`
166168
- 下载成功 → 删除备份

src/one_dragon/utils/app_utils.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
import re
23
import subprocess
34
import sys
@@ -32,10 +33,15 @@ def get_exe_version(exe_path: str) -> str:
3233
str: 版本号,失败返回空字符串
3334
"""
3435
try:
36+
env = os.environ.copy()
37+
# 部分用户会在 Windows 兼容性设置中强制启动器以管理员身份运行
38+
# 查询版本不需要管理员权限,避免子进程因请求提权而无法读取输出
39+
env['__COMPAT_LAYER'] = 'RunAsInvoker'
3540
result = subprocess.run(
36-
f'"{exe_path}" --version',
41+
[exe_path, '--version'],
3742
capture_output=True, text=True,
3843
creationflags=subprocess.CREATE_NO_WINDOW,
44+
env=env,
3945
)
4046
version_output = ANSI_ESCAPE_PATTERN.sub('', result.stdout).strip()
4147
return version_output.rsplit(maxsplit=1)[-1] if version_output else ""

0 commit comments

Comments
 (0)