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