Python 服务 及问题 服务没有及时响应启动或控制请求

1、py文件:

#coding:utf8
import win32serviceutil   
import win32service   
import win32event  
import winerror
import servicemanage
import os,time,sys   
from subprocess import Popen, PIPE  
import json  
import signal  
    """
    #1.安装服务
    python WinPollManager.py install
    #2.让服务自动启动
    python WinPollManager.py --startup auto install
    #3.启动服务
    python WinPollManager.py start
     #4.重启服务
    python WinPollManager.py restart
    #5.停止服务
    python WinPollManager.py stop
    #6.删除/卸载服务
    python WinPollManager.py remove
    """
class Anaservice(win32serviceutil.ServiceFramework):   
    _svc_name_ = "ANAservice"  #服务名
    _svc_display_name_ = "ANAservice"   #在windows中显示的名

   _svc_description_ = "Ana service is writen by python"  #描述

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


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


    def SvcDoRun(self):  
        while self.isAlive:
            #do something here

if __name__=='__main__':  
    if len(sys.argv) == 1:
        try:
            evtsrc_dll = os.path.abspath(servicemanager.__file__)
            servicemanager.PrepareToHostSingle(Anaservice)
            servicemanager.Initialize('Anaservice', evtsrc_dll)
            servicemanager.StartServiceCtrlDispatcher()
        except win32service.error, details:
            if details[0] == winerror.ERROR_FAILED_SERVICE_CONTROLLER_CONNECT:
                win32serviceutil.usage()
    else:
        win32serviceutil.HandleCommandLine(Anaservice)


2,所用系统为win10,软件为VScode,安装服务需要系统权限,以管理员身份打开VScode,在code终端内依次:

    #1.安装服务
    python test.py install
    #2.让服务自动启动
    python test.py --startup auto install
    #3.启动服务
    python test.py start

即可在系统服务列表中看到名为Anaservice的服务进程。
     #4.重启服务
    python test.py restart
    #5.停止服务
    python test.py stop
    #6.删除/卸载服务
    python test.py remove

3,start服务时,提示:服务没有及时响应启动或控制请求,以为是代码写的问题,找了几个版本的代码都存在这个问题,在window事件查看器中,可以看到:

查看服务属性,看到可执行文件的地址为:"C:\Python27\lib\site-packages\win32\PythonService.exe"

于是到相应文件夹找这个exe文件,果然,文件无法运行,提示:由于找不到pywintypes27.dll,*******

网上下载x86 版本的pywintypes27.dll,放到上面那个文件夹下面,再start一下:Starting service MyService,

在服务中,找到Mysevice服务,启动已经不会报错。

【ps:删除服务的方法为:1,以管理员身份运行cmd,然后sc delete 服务名,即可删除服务。或者在python中运行 stop再运行remove指令,】

4 如果连接有数据库,提示相关服务无法启动,到事件查看器里看看是不是数据库连接失败,用户名 密码错误?

5 window中写入文件路径时,注意转义字符问题,'\'是转义字符,写入数据库时,'\'会消失,直接按字符串写入会出错,最好按linux格式'/'写入。