You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用InitiateSystemShutdown时提示拒绝访问,以管理员运行仍无效

排查Python调用InitiateSystemShutdown拒绝访问的问题

核心原因分析

即使以管理员身份运行脚本仍报错pywintypes.error: (5, 'InitiateSystemShutdown', 'Access is denied.'),通常和以下两点直接相关:

  • 管理员账号默认未启用SeShutdownPrivilege权限:Windows系统的关机操作需要这个特定权限令牌,普通管理员权限不包含该权限的启用状态。
  • 本地安全策略限制:系统组策略可能移除了管理员组的“关闭系统”权限。

解决方法

1. 在代码中主动启用关机权限

通过win32security模块调整进程权限,先启用SeShutdownPrivilege再调用关机函数:

import win32api
import win32security
import win32con

def enable_shutdown_privilege():
    # 获取当前进程的权限令牌
    htoken = win32security.OpenProcessToken(
        win32api.GetCurrentProcess(),
        win32con.TOKEN_ADJUST_PRIVILEGES | win32con.TOKEN_QUERY
    )
    # 查找关机权限对应的ID
    priv_id = win32security.LookupPrivilegeValue(None, win32con.SE_SHUTDOWN_NAME)
    # 启用该权限
    win32security.AdjustTokenPrivileges(
        htoken,
        False,
        [(priv_id, win32con.SE_PRIVILEGE_ENABLED)]
    )
    win32api.CloseHandle(htoken)

# 先启用权限,再执行关机操作
enable_shutdown_privilege()
win32api.InitiateSystemShutdown(None, "message", 100, 1, 0)

2. 检查本地安全策略设置

  1. 运行secpol.msc打开本地安全策略编辑器
  2. 依次展开:本地策略 -> 用户权限分配
  3. 找到关闭系统选项,确认你的管理员账号或Administrators组在权限列表中
  4. 若缺少对应账号/组,添加后重启系统生效

3. 验证函数参数正确性

InitiateSystemShutdown的参数定义为:
InitiateSystemShutdown(lpMachineName, lpMessage, dwTimeout, bForceAppsClosed, bRebootAfterShutdown)

  • bForceAppsClosed=1会强制关闭未响应程序,若改为0可能因程序阻止关机触发权限错误(但你的情况更可能是权限问题)
  • bRebootAfterShutdown=0表示执行关机而非重启,该参数本身无权限冲突

内容的提问来源于stack exchange,提问作者Abhimanyu Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:31:09