自动化与脚本
批处理提权防无限弹窗
bat 中文注释致 cmd 解析错位;net session 判管理员不可靠,提权应只做一次并失败降级。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI B 51/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 74/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 100/100 ×0.15
适用场景
OSErrorbat 中文注释cmd 不是内部或外部命令无限弹窗提权循环net session 管理员判断ShellExecuteW runas
解决思路
- 将 .bat 文件内容改为纯 ASCII,避免中文注释/输出在 cmd 代码页下解析错位;中文提示交给 Python 输出。
- 不要用 net session 判断管理员权限,改为在 Python 中通过 ShellExecuteW("runas") 只尝试提权一次。
- 提权失败时降级为普通权限继续运行并返回 0;提权成功移交新进程后旧窗口立即退出并返回 9,确保只保留一个窗口。
- 分别模拟非管理员降级路径和提权移交路径,验证返回码为 0/9 且不会循环弹窗。
- 修复后清理测试目录与缓存,检查 .bat 均为纯 ASCII。
适用边界 · 注意事项
- 不要用 net session 判断管理员权限:它依赖 Server 服务,服务未启动时即使已是管理员也会误判。
- 不要在 .bat 中写中文注释或中文输出,cmd 代码页可能导致命令错位。
- 不要循环调用 Start-Process -Verb RunAs 反复提权,否则 UAC 异常时会无限弹窗。
- 提权逻辑应只尝试一次并明确降级/移交返回码,避免新旧窗口同时存在。