You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python 2.7通过PID获取svchost.exe路径?遇权限拒绝问题

解决psutil获取svchost.exe路径时的权限拒绝问题

嘿,我之前也碰到过一模一样的问题!svchost.exe作为Windows的核心系统进程,很多实例都是运行在SYSTEM权限下的,普通用户权限的Python脚本根本没法直接读取它们的路径信息——这是Windows的权限保护机制在起作用,完全不是你的代码写错了。

为什么会出现Access Denied?

Windows对系统级进程的访问有严格的权限控制,svchost.exe承载了大量系统服务,这些服务对应的进程归SYSTEM账户所有,普通用户进程没有足够的权限去调用底层API读取它们的可执行文件路径,psutil在调用这些API时就会抛出AccessDenied错误。

几个可行的解决办法

  • 以管理员身份运行脚本
    这是最直接的解决方案:右键点击你的Python脚本、命令提示符或者VS Code等编辑器,选择「以管理员身份运行」,再执行你的代码,就能正常获取svchost.exe的路径了。

  • 先确认目标PID的正确性
    有时候可能是PID输入错误,或者进程已经退出,也会触发类似报错。可以先列出所有svchost进程的PID,确认你要访问的那个是存在的:

    import psutil
    for proc in psutil.process_iter(['pid', 'name']):
        if proc.info['name'] == 'svchost.exe':
            print(f"PID: {proc.info['pid']}")
    
  • 给脚本添加异常处理(兼容普通用户场景)
    如果不想每次都用管理员权限运行,或者需要脚本更健壮,可以捕获权限异常,给用户友好提示:

    import psutil
    try:
        p = psutil.Process(1832)
        print(p.exe())
    except psutil.AccessDenied:
        print("权限不足,请以管理员身份运行此脚本!")
    except psutil.NoSuchProcess:
        print("该PID对应的进程不存在,请检查PID是否正确!")
    

小补充

不是所有svchost进程都需要管理员权限——有些svchost是用来承载用户级服务的,普通权限就能访问它们的路径,但系统服务对应的svchost进程,肯定需要管理员权限才能读取信息。

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

火山引擎 最新活动