[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 且软件可以正常工作。

补充说明:

  1. 已检查 Windows 的本地安全策略,UAC 提升提示行为设置为系统默认的“非 Windows 二进制文件的同意提示”,且未被杀毒软件拦截。
Image
  1. 电脑上的其他软件,包括同类代理软件 Clash Verge Rev,在应用内触发提权时,都能正常弹出全屏背景变暗的 UAC 对话框(即成功触发了安全桌面)。 这说明我的系统 UAC 功能完全正常。 Image

  2. 软件所在路径不含中文字符。

技术推测 (解决问题时由Gemini 3.1 Pro提出):

  1. 这似乎是调用底层提权接口(如 ShellExecute runas)时的逻辑遗漏,可能由以下常见原因导致:
  2. 进程过早退出:在请求提权的 UAC 弹窗(consent.exe)尚未完全接管屏幕之前,旧的主进程就已经执行了退出逻辑,导致 UAC 进程失去父源头而被系统中断。建议在调用提权代码后增加短暂延迟或等待新实例启动确认。
  3. 未绑定主窗口句柄:调用提权 API 时未传入当前激活的主 UI 窗口 HWND,导致 UAC 弹窗被 Windows 判定为后台请求从而静默压制。
  4. 路径转义问题:传给提权命令的应用执行路径如果包含空格或中文字符,且未做严谨的引号包裹,可能导致命令截断失效。

重现方式

  1. 正常双击打开 Clash Party(以普通用户权限运行)。
  2. 在软件内触发需要高权限的操作(例如尝试开启 TUN 模式)。
  3. 软件弹出提示框“启用TUN模式需要管理员权限,是否现在重启应用获取权限?”。
Image
  1. 点击确认。
  2. 软件自动退出,并在右下角弹出通知“正在以管理员权限重启应用,请在UAC对话框中点击'是'”

右下角通知: Image

系统通知列表: Image

  1. 点击通知。
  2. 实际结果: 没有任何系统 UAC 提示框弹出,软件提权失败(且软件直接退出后没有重新启动)。
  3. 预期结果: 屏幕变暗,正常弹出 Windows UAC 对话框询问是否允许此应用对设备进行更改。

Source: mihomo-party-org/clash-party