用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服务的更多相关文章

  1. 【python】使用python写windows服务

    背景 运维windows服务器的同学都知道,windows服务器进行批量管理的时候非常麻烦,没有比较顺手的工具,虽然saltstack和ansible都能够支持windows操作,但是使用起来总感觉不 ...

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

    MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲击与影响,那这个世界永远像现在不变就行了,大家都好好的,待在自 ...

  3. Python做windows服务

    Python做windows服务(多进程服务),并结束多进程 Python中_,__,__xx__的区别 在注册MyWinService服务时,再使用 "sc delete 服务器名称&qu ...

  4. 写一个Python的windows服务

    1. 安装pywin32和pyinstaller pip install pywin32 pip install pyinstaller 2.写一个服务Demo # -*- coding: utf-8 ...

  5. 使用Python写Windows Service服务程序

    1.背景 如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service,用Python来做这个事情必须要借助第三方模块pywin32 ...

  6. Python-windows服务-重启自动化

    一. 前言 有了上一篇的“python初学”的基础,咱们就有了python的开发包,有了开发环境IDE,那我们就可以干活了.我的第一个选题就是让我们的windows服务可以按照我们的意愿进行自动重启. ...

  7. python管理Windows服务

    上一篇介绍了pywin32模块,它的win32service子模块提供了对服务管理API的包装,相关API如下: ChangeServiceConfig ChangeServiceConfig2 Cl ...

  8. c#写windows服务

    序言 前段时间做一个数据迁移项目,刚开始用B/S架构做的项目,但B/S要寄存在IIs中,而IIs又不稳定因素,如果重启IIs就要打开页面才能运行项目.有不便之处,就改用Windows服务实现.这篇就总 ...

  9. Python 写Windows Service服务程序

    1.需求 为什么要开发一个windows服务呢?之前做一个程序,必须要读取指定目录文件License, 因为其他程序也在读取这指定目录的License文件,且License不同时会修改License的 ...

随机推荐

  1. IIS Express 的怪毛病 vs2013本机调试

    本机调试时,如果同一个项目有多个版本,同时debug,可能会串项目调试,造成不必要的困扰: 通常情况下是 IIS express的映射出现了问题: 解决方案: 1.打开目录:查看文件C:\Users\ ...

  2. sourcetree帮助文档

    Overview SourceTree可以在bookmarks界面跟踪所有的git和mercurial项目.可以概览工程中是否有需要提交的文件等.添加新的bookmark很简单,可以通过两种方式,通过 ...

  3. ASP.NET Core 依赖注入(构造函数注入,属性注入等)

    原文:ASP.NET Core 依赖注入(构造函数注入,属性注入等) 如果你不熟悉ASP.NET Core依赖注入,先阅读文章: 在ASP.NET Core中使用依赖注入   构造函数注入 构造函数注 ...

  4. 79.iOS 设备的UI规范和iOS各控件默认高度

    iOS设备的UI 规范 iPhone界面尺寸 iPhone图标尺寸 iPad的设计尺寸 iPad图标尺寸 iPhone设备尺寸分辨率比例 iPhone各设备 launch image iOS 各种控件 ...

  5. Solidedge如何新建参考平面 参考面

    1 建立平行平面 点击平行平面 点击参考平面,输入相对距离   2 建立成角平面 先选择基准面,再选则旋转轴(第二次点击一个平面,该平面与基准面相交形成的直线即为旋转轴)   输入角度即可完成(鼠标左 ...

  6. android 文件读取(assets)

    assets文件夹资源的访问        assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件.       1. 先在Activity里面调用g ...

  7. Leetcode41: Remove Duplicates from Sorted List

    Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...

  8. java中简单字符替换

    在网络编程中,假设URL含有特殊字符,如空格.'#'等,server将无法识别导致无法获得正确的參数值.我们须要将这些特殊字符转换成server能够识别的字符,比如将空格转换成'%20'.给定一个字符 ...

  9. 使用zTree进行数据动态显示

    由于公司项目的须要.现学了一下zTree的使用. 以下是我项目的结构图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVuamFtaW5fd2h4/f ...

  10. plsql 无需配置客户端连接.

    plsql 无需配置客户端连接. (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.5)(PORT=1521)))(C ...