欢迎访问宙启技术站
智能推送

使用win32service创建和控制Windows服务的方法

发布时间:2023-12-24 11:00:13

创建和控制Windows服务是一个常见的需求,可以使用win32service模块来实现。下面是使用win32service创建和控制Windows服务的方法,并附带了一个使用例子。

创建Windows服务:

1. 导入win32serviceutil、win32service、win32event模块

import win32serviceutil
import win32service
import win32event

2. 定义一个继承自win32serviceutil.ServiceFramework的类

class MyService(win32serviceutil.ServiceFramework):
    _svc_name_ = 'MyService'
    _svc_display_name_ = 'My Service'
    
    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
    
    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)
    
    def SvcDoRun(self):
        win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)

_svc_name_表示服务名称,_svc_display_name_表示服务显示名称,SvcStop()方法用于停止服务,SvcDoRun()方法用于运行服务。

3. 定义一个函数来安装和卸载服务

def install_service():
    win32serviceutil.InstallService(
        None,
        MyService._svc_name_,
        MyService._svc_display_name_,
        'python ' + __file__,
        'pythonservice'
    )
    
def uninstall_service():
    win32serviceutil.RemoveService(MyService._svc_name_)

控制Windows服务:

1. 导入win32serviceutil模块

import win32serviceutil

2. 定义一个函数来启动、停止、重启和查询服务状态

def start_service():
    win32serviceutil.StartService(MyService._svc_name_)

def stop_service():
    win32serviceutil.StopService(MyService._svc_name_)

def restart_service():
    stop_service()
    start_service()

def query_service_status():
    status = win32serviceutil.QueryServiceStatus(MyService._svc_name_)
    print("Current service status:", status)

使用例子:

import win32serviceutil
import win32service
import win32event

class MyService(win32serviceutil.ServiceFramework):
    _svc_name_ = 'MyService'
    _svc_display_name_ = 'My Service'

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)

    def SvcDoRun(self):
        win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)

def install_service():
    win32serviceutil.InstallService(
        None,
        MyService._svc_name_,
        MyService._svc_display_name_,
        'python ' + __file__,
        'pythonservice'
    )

def uninstall_service():
    win32serviceutil.RemoveService(MyService._svc_name_)

def start_service():
    win32serviceutil.StartService(MyService._svc_name_)

def stop_service():
    win32serviceutil.StopService(MyService._svc_name_)

def restart_service():
    stop_service()
    start_service()

def query_service_status():
    status = win32serviceutil.QueryServiceStatus(MyService._svc_name_)
    print("Current service status:", status)

# 安装服务
install_service()

# 启动服务
start_service()

# 查询服务状态
query_service_status()

# 停止服务
stop_service()

# 卸载服务
uninstall_service()

以上是使用win32service模块创建和控制Windows服务的方法和一个使用例子。你可以根据自己的需求来修改和扩展这些代码。