Python系统自动化遇pywintypes.error: (5, 'OpenSCManager', 'Access is denied.')错误求助
问题解答:解决Windows服务操作的权限拒绝错误
没错,你碰到的pywintypes.error: (5, 'OpenSCManager', 'Access is denied.')确实是权限不足导致的——修改Windows系统级服务(比如Windows Update)必须要有管理员级别的提升权限(Elevated access),普通用户权限根本碰不了这类核心服务。
下面给你几种具体的操作方案,还有代码里的关键细节提醒:
一、手动提升权限运行代码
方法1:通过IDE/终端以管理员身份启动
- 如果你用PyCharm、VS Code这类IDE:右键点击IDE图标,选择以管理员身份运行,再在里面执行你的代码就行。
- 如果用命令提示符(CMD)或PowerShell:同样右键点终端图标选以管理员身份运行,切换到代码所在目录后,执行
python 你的脚本文件名.py。
方法2:直接右键脚本提权运行
找到你的Python脚本文件,右键选择以管理员身份运行,如果系统弹出打开方式选择框,直接选你的Python解释器即可。
二、让脚本自动请求提升权限
要是不想每次手动右键提权,可以给脚本加一段代码,让它运行时自动检查权限,没权限就弹窗请求管理员权限:
import ctypes import sys import win32serviceutil def is_admin(): try: return ctypes.windll.shell32.IsUserAnAdmin() except: return False if not is_admin(): # 以管理员身份重新启动当前脚本 ctypes.windll.shell32.ShellExecuteW( None, "runas", sys.executable, " ".join(sys.argv), None, 1 ) sys.exit() # 注意:Windows Update的实际服务名是`wuauserv`,不是显示名称"Windows Update" service = "wuauserv" try: win32serviceutil.StopService(service) print(f"服务 {service} 已成功停止") except Exception as e: print(f"操作失败:{e}")
额外重要提醒
很多Windows服务的显示名称和实际服务名不一样,比如你写的"Windows Update",它的真实服务名是wuauserv。想查真实服务名可以这么做:
- 按下Win+R,输入
services.msc打开服务管理器 - 找到对应服务,右键选「属性」,「常规」标签页里的「服务名称」就是代码里需要用的名称
内容的提问来源于stack exchange,提问作者joy
相关产品推荐
相关产品推荐

