当前位置: 首页 > article >正文

Python实现Windows服务自启动、禁用、启动、停止、删除

如果一个程序被服务监管,那么仅仅kill程序是无用的,还要把服务关掉

import win32service
import win32serviceutil


def EnableService(service_name):
    try:
        # 获取服务管理器
        scm = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)

        # 获取服务的句柄
        service = win32service.OpenService(scm, service_name, win32service.SERVICE_ALL_ACCESS)

        # 自启动服务
        win32service.ChangeServiceConfig(service, win32service.SERVICE_NO_CHANGE, win32service.SERVICE_AUTO_START, win32service.SERVICE_NO_CHANGE, None, None, 0, None, None, None, None)

        print(f"{service_name} service  enabled successfully.")
    except Exception as e:
        print(f"Failed to enable {service_name} service. Error: {e}")
    finally:
        # 关闭服务句柄
        win32service.CloseServiceHandle(service)
        # 关闭服务管理器句柄
        win32service.CloseServiceHandle(scm)


def StartService(service_name):
    try:
        win32serviceutil.StartService(service_name)
        print(f"{service_name} service started successfully.")
    except Exception as e:
        print(f"Failed to start {service_name} service. Error: {e}")


def StopService(service_name):
    try:
        # 获取服务管理器
        scm = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)

        # 获取服务的句柄
        service = win32service.OpenService(scm, service_name, win32service.SERVICE_ALL_ACCESS)

        # 停止服务
        win32service.ControlService(service, win32service.SERVICE_CONTROL_STOP)

        print(f"{service_name} service  stopped successfully.")
    except Exception as e:
        print(f"Failed to stop {service_name} service. Error: {e}")
    finally:
        # 关闭服务句柄
        win32service.CloseServiceHandle(service)
        # 关闭服务管理器句柄
        win32service.CloseServiceHandle(scm)


def DisableService(service_name):
    try:
        # 获取服务管理器
        scm = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)

        # 获取服务的句柄
        service = win32service.OpenService(scm, service_name, win32service.SERVICE_ALL_ACCESS)

        # 禁用服务

        win32service.ChangeServiceConfig(service, win32service.SERVICE_NO_CHANGE, win32service.SERVICE_DISABLED, win32service.SERVICE_NO_CHANGE, None, None, 0, None, None, None, None)

        print(f"{service_name} service  Disabled successfully.")
    except Exception as e:
        print(f"Failed to disable {service_name} service. Error: {e}")
    finally:
        # 关闭服务句柄
        win32service.CloseServiceHandle(service)
        # 关闭服务管理器句柄
        win32service.CloseServiceHandle(scm)
def Remove_Service(service_name):
    try:
        win32serviceutil.RemoveService(service_name)
        print(f"Service '{service_name}' removed successfully.")
    except Exception as e:
        print(f"Failed to remove service '{service_name}'. Error: {e}")


service_name = 'PostgreSQL_65432'
# EnableService(service_name)
StartService(service_name)
#StopService(service_name)
#DisableService(service_name)
#Remove_Service(service_name)

http://www.kler.cn/a/148421.html

相关文章:

  • 前端,location.reload刷新页面
  • #include<string>和#include<string.h>有什么区别
  • SQL面试题——奔驰SQL面试题 车辆在不同驾驶模式下的时间
  • 简单叙述 Spring Boot 启动过程
  • Llama架构及代码详解
  • 基于Java Web的传智播客crm企业管理系统的设计与实现
  • 【传智杯】儒略历、评委打分、萝卜数据库题解
  • 【漫谈】信创
  • 位运算总结
  • linux下的工具---yum
  • 为第一个原生Spring5应用程序添加上Log4J日志框架!
  • Vue2问题:如何全局使用less和sass变量?
  • TypeScript 学习笔记 第二部分 webpack 创建typescript项目
  • vue3中shallowReactive与shallowRef
  • Kotlin语言的一些技术点
  • Redis 与其他数据库的不同之处 | Navicat
  • 【业务实战】mysql数据库中<标签tag功能>一般是怎么设计的?
  • 【RLChina2023】CCF 苏州 记录
  • 微信小程序开发——项目开发入门
  • C++ 泛型编程,函数模版和类模版
  • 高等数学零基础篇复习笔记
  • 离线配置conda环境
  • 基于Python的网络爬虫设计与实现
  • LeetCode-805.保持城市天际线 C/C++实现 超详细思路及过程[M]
  • Android BSP 开发之六
  • 什么是网络爬虫技术?它的重要用途有哪些?