[Bug] Windows端 请求管理员权限时无法弹出系统 UAC 提权对话框
Author: Kiania-1Created Apr 1, 2026Updated Sep 6, 2026
Labelsbugmore info needed
Verify steps
- 我已在标题简短的描述了我所遇到的问题
- 我已在 Issue Tracker 中寻找过我要提出的问题,但未找到相同的问题
- 我已在 常见问题 中寻找过我要提出的问题,并没有找到答案
- 这是 GUI 程序的问题,而不是内核程序的问题
- 我已经关闭所有杀毒软件/代理软件后测试过,问题依旧存在
- 我已经使用最新的测试版本测试过,问题依旧存在
操作系统
Windows
系统版本
Windows 11 23H2
发生问题 clash-party 版本
1.9.4
描述
当软件触发需要管理员权限的操作(开启虚拟网卡、开启开机自启),仅会在系统通知中提示“正在以管理员权限重启应用,请在UAC对话框中点击'是'”,而不会全屏弹窗UAC对话框。 点击确认后,系统并没有弹出 UAC (用户账户控制) 对话框,提权操作静默失败。
如果彻底关闭应用,手动右键快捷方式选择“以管理员身份运行”,则能正常弹出 UAC 且软件可以正常工作。 或右键属性→兼容性→以管理员身份运行此程序,也可正常弹出 UAC 且软件可以正常工作。
补充说明:
- 已检查 Windows 的本地安全策略,UAC 提升提示行为设置为系统默认的“非 Windows 二进制文件的同意提示”,且未被杀毒软件拦截。
电脑上的其他软件,包括同类代理软件 Clash Verge Rev,在应用内触发提权时,都能正常弹出全屏背景变暗的 UAC 对话框(即成功触发了安全桌面)。 这说明我的系统 UAC 功能完全正常。
软件所在路径不含中文字符。
技术推测 (解决问题时由Gemini 3.1 Pro提出):
- 这似乎是调用底层提权接口(如 ShellExecute runas)时的逻辑遗漏,可能由以下常见原因导致:
- 进程过早退出:在请求提权的 UAC 弹窗(consent.exe)尚未完全接管屏幕之前,旧的主进程就已经执行了退出逻辑,导致 UAC 进程失去父源头而被系统中断。建议在调用提权代码后增加短暂延迟或等待新实例启动确认。
- 未绑定主窗口句柄:调用提权 API 时未传入当前激活的主 UI 窗口 HWND,导致 UAC 弹窗被 Windows 判定为后台请求从而静默压制。
- 路径转义问题:传给提权命令的应用执行路径如果包含空格或中文字符,且未做严谨的引号包裹,可能导致命令截断失效。
重现方式
- 正常双击打开 Clash Party(以普通用户权限运行)。
- 在软件内触发需要高权限的操作(例如尝试开启 TUN 模式)。
- 软件弹出提示框“启用TUN模式需要管理员权限,是否现在重启应用获取权限?”。
- 点击确认。
- 软件自动退出,并在右下角弹出通知“正在以管理员权限重启应用,请在UAC对话框中点击'是'”
右下角通知:
系统通知列表:
- 点击通知。
- 实际结果: 没有任何系统 UAC 提示框弹出,软件提权失败(且软件直接退出后没有重新启动)。
- 预期结果: 屏幕变暗,正常弹出 Windows UAC 对话框询问是否允许此应用对设备进行更改。
Source: mihomo-party-org/clash-party