首页 > 解决方案 > Python3.7服务错误1063:服务进程无法连接到服务控制器

问题描述

我不知道为什么我不能在下面的代码中启动服务。我可以安装它并在调试模式下运行它(这里我不能在不关闭控制台的情况下停止服务)模式,但启动会引发此错误:

1063:服务进程无法连接到服务控制器。

在过去它运行但从昨天开始我得到了错误。
我使用带有 python 3.7.6 和 pywin32 版本 227 的 pipenv。

我的代码:


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()

标签: pythonwindows-servicespython-3.7pywin32win32serviceutil

解决方案


推荐阅读