Python脚本申请管理员权限点击确认后无响应问题求助
Python管理员权限申请后无响应问题解决方案
核心原因
- 工作目录不匹配:
runas启动的管理员进程默认工作路径为C:\Windows\System32,你代码中用相对路径写入的testingAdmin.txt实际被保存到了系统目录,而非脚本所在文件夹,会让你误以为代码没执行。 - 窗口自动关闭:提权后的进程执行完写入逻辑后会直接退出,控制台窗口一闪而过,没有可见提示,也会造成无反应的错觉。
- 参数解析错误:如果你的脚本路径包含空格,
" ".join(sys.argv)的拼接方式不会对路径做引号包裹,会导致参数拆分错误,脚本无法正常启动。
修正后代码
import ctypes, sys, os def check_is_admin(): try: return ctypes.windll.shell32.IsUserAnAdmin() except: return False if check_is_admin(): # 此处可替换为设置系统时间的业务逻辑 with open("testingAdmin.txt", "w") as text_file: text_file.write('this is admin') print("管理员权限验证通过,操作执行成功") # 增加暂停逻辑,避免窗口直接关闭 input("按任意键退出") else: print('当前无管理员权限,正在申请权限') # 给所有参数包裹双引号,处理路径含空格的场景 cli_params = " ".join([f'"{arg}"' for arg in sys.argv]) # 手动指定工作目录为脚本所在文件夹 script_path = os.path.dirname(os.path.abspath(__file__)) ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, cli_params, script_path, 1)
验证说明
运行修正后的代码,同意权限申请后会弹出新的控制台窗口并停留,你可以直接在脚本所在目录找到生成的testingAdmin.txt文件。如果要验证原有代码是否生效,可以直接到C:\Windows\System32目录下查找对应文件。
内容的提问来源于stack exchange,提问作者Jamil
相关产品推荐
相关产品推荐

