Python3 .7 Ошибка службы 1063: процессу службы не удалось подключиться к контроллеру службы - PullRequest
2 голосов
/ 17 марта 2020

Я не могу понять, почему я не могу запустить службу в коде ниже. Я могу установить его и запустить в режиме отладки (здесь я не могу остановить службу, не закрывая консоль), но при запуске возникает эта ошибка:

1063: процессу службы не удалось подключиться к сервисный контроллер.

В прошлом он работал, но со вчерашнего дня я получил ошибку.
Я использую pipenv с python 3.7.6 и pywin32 Версия 227.

Мой код:


import win32service
import win32event
import win32serviceutil
import servicemanager
ServiceFramework = win32serviceutil.ServiceFramework

class WindowsService(ServiceFramework):
    _svc_name_ = constants.SERVICE_NAME
    _svc_display_name_ = constants.SERVICE_DISPLAYNAME

    @classmethod
    def set_service_names(cls, service_name, service_display_name):
        cls._svc_name_ = service_name
        cls._svc_display_name_ = service_display_name

    def __init__(self, args):
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.stop_event = win32event.CreateEvent(None, 0, 0, None)
        self.stop_requested = False

    @classmethod
    def start_service(cls):

        try:
            evtsrc_dll = os.path.abspath(servicemanager.__file__)
            servicemanager.Initialize(cls._svc_name_, evtsrc_dll)
            servicemanager.PrepareToHostSingle(cls)
            servicemanager.StartServiceCtrlDispatcher() # this throws the error
        except Exception as desc:
            win32serviceutil.HandleCommandLine(cls)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.stop_event)
        self.stop_requested = True
        example_main.run_flag = False

        time.sleep(3)
        sys.exit(0)

    def SvcDoRun(self):
        self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
        self.ReportServiceStatus(win32service.SERVICE_RUNNING)

        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_, ''))
        try:
            example_main.main()
        except Exception as desc:
            pass

if __name__ == "__main__":
    if "install" in sys.argv or "remove" in sys.argv:
        win32serviceutil.HandleCommandLine(WindowsService)
    else:
        WindowsService.start_service()

...