用python写windows服务

用python写windows服务(1)

以python2.5 为例
需要软件

* python 2.5
        * pywin32(与2.5 版本相匹配的)

Service Control Manager (SCM)

服务管理器(SCM) 是windows NT的 一部分,所有服务必须通过SCM 注册,SCM负责启动,停止服务等。

当一个进程通过SCM注册后, 有如下特质:

* 运行该进程的用户,未必是当前登录的用户。
        * 该进程如果依赖其他服务,哪么该服务启动前,依赖服务回启动。该服务停止后,依赖服务会停止。(估计是应用计数减1)
        * 服务可知计算机启动后自动启动,或者手动启动。

windows NT 通过执行一个进程开始相应服务。一旦这个进程执行,它需要告知SCM它实际上是作为一个服务运行。还需要传给SCM一个控制句柄(control handler)。其实就是一个函数,用于处理SCM 发来的相关信息。 当服务被停止时, SCM传信息给控制句柄。服务本身负责处理该请求,并停止本身服务。
pywin32 服务相关module

* win32service 实现了Win32服务功能。
        * win32serviceutil 对api的包装,始面向用户的接口更友好。
        * PythonService.exe 使用pywin32 服务器,它必须先注册。

下面重点讲 win32serviceutil
服务框架类

win32serviceutil.ServiceFramework

__init__

构造函数,注册ServiceCtrlHandler给SCM

ServiceCtrlHandler

本服务的control handler 的默认实现。该函数会查询类内的函数名,用以判断该服务提供哪些控制接口,比如类内有SvcPause 函数。则会认为该服务可以被暂停。

SvcRun

服务入口点。服务运行,就是运行这个函数。

简单示例
代码:

# SmallestService.py
#
# A sample demonstrating the smallest possible service written in Python.

import win32serviceutil
import win32service
import win32event

class SmallestPythonService(win32serviceutil.ServiceFramework):
    _svc_name_ = "SmallestPythonService"
    _svc_display_name_ = "The smallest possible Python Service"
    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        # Create an event which we will use to wait on.
        # The "service stop" request will set this event.
        self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)

    def SvcStop(self):
        # Before we do anything, tell the SCM we are starting the stop process.
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        # And set my event.
        win32event.SetEvent(self.hWaitStop)

    def SvcDoRun(self):
        # We do nothing other than wait to be stopped!
        win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)

if __name__==‘__main__‘:
    win32serviceutil.HandleCommandLine(SmallestPythonService)

安装服务
进入PythonService.exe所在目录, 命令行下执行命令

(PATH)>PythonService.exe /register
Registering the Python Service Manager...
安装服务

C:\Scripts> SmallestService.py install
Installing service SmallestPythonService to Python class
   C:\Scripts\SmallestService.SmallestPythonService
Service installed
C:\Scripts>
启动服务

C:\Scripts> python.exe SmallestService.py start
Starting service SmallestPythonService
C:\Scripts>
启动确认

C:\Scripts> python.exe SmallestService.py start
Starting service SmallestPythonService
Error starting service: An instance of the service is already running.
C:\Scripts>
停止服务

C:\Scripts> python.exe SmallestService.py stop
Stopping service SmallestPythonService
C:\Scripts>

用python写windows服务,布布扣,bubuko.com

时间: 2024-10-06 18:15:26

用python写windows服务的相关文章

c#写windows服务

c#写windows服务 序言 前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目.有不便之处,就改用Windows服务实现.这篇就总结下,windows服务的编写,调试,安装卸载. Windows服务介绍 Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这使服务

不用写Windows服务实现定时器功能(FluentScheduler )

链接:http://www.cnblogs.com/mafly/p/FluentScheduler.html MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲击与影响,那这个世界永远像现在不变就行了,大家都好好的,待在自己的舒适区,社会丝毫没有创新与进步而言. 其实, USB Type-C 接口协议在三年前几个科技巨头公司就参与制定了协议,并答应要在自家的产品上推广它,但谁都怕一下子在自家产品上升级 USB

Python做windows服务

Python做windows服务(多进程服务),并结束多进程 Python中_,__,__xx__的区别 原文地址:https://www.cnblogs.com/sdadx/p/9241137.html

写一个Python的windows服务

1. 安装pywin32和pyinstaller pip install pywin32 pip install pyinstaller 2.写一个服务Demo # -*- coding: utf-8 -*- import sys import time import win32api import win32event import win32service import win32serviceutil import servicemanager import logging import

python管理Windows服务

上一篇介绍了pywin32模块,它的win32service子模块提供了对服务管理API的包装,相关API如下: ChangeServiceConfig ChangeServiceConfig2 CloseServiceHandle ControlService CreateDesktop CreateService CreateWindowStation DeleteService EnumDependentServices EnumServicesStatus EnumServicesSta

C# 使用vs2013 写 windows服务

第一步:添加windows服务项目 并起一个 好看的名字 第二步:添加安装程序 第三步:右键点击serviceProcessInstaller1属性,在Account中选择LocalSystem 第四步:右键点击serviceInstaller1 属性,在serviceName修改自己服务需要的名称 第五步:点击ServerTest选择查看代码 OnStart 是服务启动时 会运行的 启动方法  我们一般会用一个线程去定义 OnStop 是 服务停止时 会运行的方法,一般写一些 资源回收的方法

使用C#写windows服务

首先,创建一个windows服务项目

Python写一个服务

# coding:utf-8 import json from urllib.parse import parse_qs from wsgiref.simple_server import make_server # 定义函数,参数是函数的两个参数,都是python本身定义的,默认就行了. def application(environ, start_response): # 定义文件请求的类型和当前请求成功的code start_response('200 OK', [('Content-Ty

Python写自动化之写一个Windows 服务

Python 写windows 服务,需要使用 pywin32包. 直接上代码: #encoding=utf8 ''' Created on 2014-7-1 @author: wangmengnan ''' import os import sys import win32serviceutil import win32service import win32event class PythonService(win32serviceutil.ServiceFramework): #服务名 _