Python Windows 服务 pyinstaller 错误

Ari*_*osh 5 python windows service py2exe pyinstaller

我用 Python 创建了一个程序。它的任务是检查一些日志并执行一些活动。

Reg_Version.py

class RegisterService:
.
.

    def performAction(self):
        self.__logFileSizeCheck()
        self.__getHostName()
        self.__deteleFiles()
        self.__createFiles()
.
.

class Service(win32serviceutil.ServiceFramework):
    _svc_name_ = '_test'
    _svc_display_name_ = '_Service Template'
    def __init__(self, *args):
        win32serviceutil.ServiceFramework.__init__(self, *args)
        self.log('init')
        self.stop_event = win32event.CreateEvent(None, 0, 0, None)
    def log(self, msg):
        servicemanager.LogInfoMsg(str(msg))
    def sleep(self, sec):
        win32api.Sleep(sec*1000, True)
    def SvcDoRun(self):
        self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
        try:
            self.ReportServiceStatus(win32service.SERVICE_RUNNING)
            self.log('start')
            self.start()
            self.log('wait')
            win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE)
            self.log('done')
        except Exception, x:
            self.log('Exception : %s' % x)
            self.SvcStop()
    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        self.log('stopping')
        self.stop()
        self.log('stopped')
        win32event.SetEvent(self.stop_event)
        self.ReportServiceStatus(win32service.SERVICE_STOPPED)
    # to be overridden
    def start(self): pass
    # to be overridden
    def stop(self): pass

def instart(cls, name, display_name=None, stay_alive=True):
    cls._svc_name_ = name
    cls._svc_display_name_ = display_name or name
    cls._svc_description_ = "Register service if it fails to register."
    try:
        module_path=modules[cls.__module__].__file__
    except AttributeError:
        # maybe py2exe went by
        from sys import executable
        module_path=executable
    module_file = splitext(abspath(module_path))[0]
    cls._svc_reg_class_ = '%s.%s' % (module_file, cls.__name__)
    if stay_alive: win32api.SetConsoleCtrlHandler(lambda x: True, True)
    try:
        win32serviceutil.InstallService(
            cls._svc_reg_class_,
            cls._svc_name_,
            cls._svc_display_name_,
            startType = win32service.SERVICE_AUTO_START
        )
        print 'Install ok'
        win32serviceutil.StartService(
            cls._svc_name_
        )       
        print 'Start ok'

    except Exception, x:
        print str(x)

class Test(Service):
    def start(self):
        self.serv = RegisterService()      #<---RegisterService() is my created class
        self.runflag=True
        while self.runflag:
            self.serv.performAction()    #<---The method is called here
            self.sleep(60)
            self.log("Service is alive")
    def stop(self):
        self.runflag=False
        self.log("Service is stopped")       

instart(Test, 'Myservice', 'MyServerTest_1')             
Run Code Online (Sandbox Code Playgroud)

从 cmd 提示符执行时,脚本运行良好

    C:\Windows\system32>python "C:\Users\Arijit\Desktop\New folder (2)\Reg_Version.py"
    Install ok
    Start ok
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

到这里一切正常。


现在我希望它创建一个可执行的 Windows 服务,以便我可以将程序部署到其他系统。谷歌搜索后,我知道可以使用 pyinstaller / py2exe 来完成。我首先使用 pyinstaller 并将其转换为单个可执行包。以管理员身份执行.exe后,该服务显示在 services.msc 上,但即使单击开始选项,它也没有启动。我检查了 eventvwr 并发现以下错误

错误 1053 服务没有及时响应启动或控制请求

我尝试使用 py2exe,并遇到同样的问题。该服务正在安装但尚未启动。

我引用了这个链接 Python Windows 服务 pyinstaller 可执行文件错误 1053 但它没有解决。