[Python]_[初级]_[修改Windows服务-禁用WIN10的自动更新系统服务部分]

本文介绍如何使用pywin32库在Windows中管理服务,包括创建、关闭、修改、禁用或删除服务。重点讲解了如何通过Python禁用自动更新服务,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景

  1. Windows里使用Python做一些自动化管理时, 有时候需要创建,关闭,修改,禁用或删除Windows服务, 而不是通过SC命令来简单处理. 这时候我们就需要pywin32库来调用WIN32的函数来操作.

说明

  1. pywin32是第三方库,需要自己通过pip install pywin32安装,如果提示pip版本过低,可以通过自己去pywin32下载的64位版本的AMD64或32位版本的win32,当然要对应Python本身的版本.我这里例子用的
pywin32-227.win32-py3.7.exe
  1. pywin32还有很多模块,比如shell,pythoncom,win32file,win32gui,win32security等,在安装pywin32好后,会在开始-附件Python3的快捷目录里生成一个Python for Windows Documentation的chm文档,可以方便的看说明,不过缺点就是大概只说了和win32的对应关系,函数的参数细节不多说,如果需要深入了解,需要自己通过bing来搜索,函数名和Win32的一样的,方便搜索.

  2. 注意禁用系统服务要用管理员权限,所以要以管理员权限运行。另外RestoreServiceStartManual函数是用来还原Windows Update服务设置的, 当年希望启用自动更新时.

代码

  1. 以下代码通过停止Windows Update服务,并禁用启动来达到禁用自动更新的目的.
import subprocess
import os
import win32service
import pywintypes

def AddServiceStartForbid(serviceName):
    # SC_MANAGER_ALL_ACCESS

    scHandle = None
    serviceHandle = None

    try:
        scHandle = win32service.OpenSCManager(None,None,win32service.SC_MANAGER_ALL_ACCESS)
        serviceHandle = win32service.OpenService(scHandle,serviceName,win32service.SERVICE_ALL_ACCESS )

        serviceStatus = win32service.QueryServiceStatus(serviceHandle)
        if (serviceStatus[1] != win32service.SERVICE_STOPPED):
            serviceStatus = win32service.ControlService(serviceHandle,win32service.SERVICE_CONTROL_STOP)
        print("serviceStatus: ",serviceStatus)

        win32service.ChangeServiceConfig(serviceHandle,win32service.SERVICE_NO_CHANGE,
            win32service.SERVICE_DISABLED,win32service.SERVICE_NO_CHANGE,None,None,0,None,None,None,None)
        
    except pywintypes.error  as err:
        print("error: ",repr(err))
    finally:
        if serviceHandle != None:
            win32service.CloseServiceHandle(serviceHandle)

        if scHandle != None:
            win32service.CloseServiceHandle(scHandle)

    # subprocess.run(["net","stop",serviceName])
    # subprocess.run(["sc","config",serviceName,"start=","disabled"])
    pass

def RestoreServiceStartManual(serviceName):

    scHandle = None
    serviceHandle = None

    try:
        scHandle = win32service.OpenSCManager(None,None,win32service.SC_MANAGER_ALL_ACCESS)
        serviceHandle = win32service.OpenService(scHandle,serviceName,win32service.SERVICE_ALL_ACCESS )

        win32service.ChangeServiceConfig(serviceHandle,win32service.SERVICE_NO_CHANGE,
            win32service.SERVICE_DEMAND_START,win32service.SERVICE_NO_CHANGE,None,None,0,None,None,None,None)
        
    except pywintypes.error  as err:
        print("error: ",repr(err))
    finally:
        if serviceHandle != None:
            win32service.CloseServiceHandle(serviceHandle)

        if scHandle != None:
            win32service.CloseServiceHandle(scHandle)

   

if __name__ == "__main__":
    
    AddServiceStartForbid("wuauserv")

    # RestoreServiceStartManual("wuauserv")


图1:
在这里插入图片描述

参考

pywin32

win32service

修改服务启动类型

changeserviceconfig

service_status

怎么才能知道组策略中的设置对应于注册表的位置

Win10家庭版系统也能使用组策略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白行微

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值