为什么不能创建windows服务?

2024-06-08 00:15:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一段代码,使我的程序成为windows服务,但当我用命令python name_file.py install启动我的程序时,它只是打开控制台和所有。但是当我将我的程序转换为exe文件并使用CMD创建服务时sc create JUSTBOT binpath="first path to name_file.exe second path\name_file.py" DisplayName="JUSTBOT" start=delayed-auto。它创建了一个服务,It服务正在工作,但我无法启动It服务,它已经写了error 1053。请任何人帮帮我。我使用Python 3.7

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket
import listTT

from time import sleep
import telebot
import sys


class AppServerSvc (win32serviceutil.ServiceFramework):
    _svc_name_ = "JUSTBOT"
    _svc_display_name_ = "JUSTBOT"

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

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



    def SvcRestart(self):
        if servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_,'')):
            win32serviceutil.RestartService(self._svc_name_)

        self.main()





    #def SvcDoRun(self):
    #    servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
    #                          servicemanager.PYS_SERVICE_STARTED,
    #                          (self._svc_name_,''))
    #    self.main()

    def main(self):
        while True:
            try:

                listTT.bot.polling(none_stop=True, interval=2, timeout=2)
                listTT.bot.infinity_polling(True)








            except Exception:

                pass


            except AttributeError:

                pass

            except ReferenceError:

                pass

            except telebot.apihelper.requests.exceptions.ConnectionError:

                pass

            except ConnectionAbortedError:

                pass

            except ConnectionRefusedError:

                pass

            except ConnectionResetError:

                pass

            except RuntimeError:

                pass

            except telebot.apihelper.requests.exceptions.ConnectTimeout:

                pass

            except IndexError:

                pass

            except telebot.apihelper.requests.exceptions.ReadTimeout:

                pass

            except telebot.apihelper.requests.exceptions.RetryError:

                pass

            except telebot.apihelper.requests.exceptions.Timeout:

                pass

            except telebot.apihelper.requests.exceptions.HTTPError:

                pass

            except RecursionError:

                pass



            finally:

                sleep(6)


if __name__ == '__main__':
    if len(sys.argv) == 1:
        servicemanager.Initialize()
        servicemanager.PrepareToHostSingle(AppServerSvc)
        servicemanager.StartServiceCtrlDispatcher()
    else:
        win32serviceutil.HandleCommandLine(AppServerSvc)

Tags: nameimportselfdefserviceutilmanagerpass

热门问题