Я пытался создать службу Windows, используя приведенный ниже код из блокнота jupyter. Но он выдавал ошибку при выполнении метода HandleCommandLine. ниже приведено исключение
import win32service, win32serviceutil, win32api, win32con, win32event, win32evtlogutil
import psutil
import subprocess
import os, sys, string, time, socket, signal
import servicemanager
class Service (win32serviceutil.ServiceFramework):
_svc_name_ = "Service"
_svc_display_name_ = "Service"
def __init__(self,args):
print("init")
win32serviceutil.ServiceFramework.__init__(self, *args)
self.log('Service Initialized.')
self.stop_event = win32event.CreateEvent(None, 0, 0, None)
socket.setdefaulttimeout(60)
print("init completed")
def log(self, msg):
print("log")
servicemanager.LogInfoMsg(str(msg))
print("log")
def sleep(self, sec):
print("sleep")
win32api.Sleep(sec*1000, True)
print("sleep completed")
def SvcStop(self):
print("SvcStop")
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
self.stop()
self.log('Service has stopped.')
win32event.SetEvent(self.stop_event)
self.ReportServiceStatus(win32service.SERVICE_STOPPED)
print("SvcStop completed")
def SvcDoRun(self):
self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
try:
self.ReportServiceStatus(win32service.SERVICE_RUNNING)
self.log('Service is starting.')
self.main()
win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE)
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,servicemanager.PYS_SERVICE_STARTED,(self._svc_name_, ''))
except Exception as e:
s = str(e);
self.log('Exception :'+s)
self.SvcStop()
def stop(self):
self.runflag=False
try:
print('Hi')
except Exception as e:
self.log(str(e))
def main(self):
self.runflag=True
while self.runflag:
rc = win32event.WaitForSingleObject(self.stop_event, 24*60*60)
# Check to see if self.hWaitStop happened
if rc == win32event.WAIT_OBJECT_0:
self.log("Service has stopped")
break
else:
try:
print('hi')
except Exception as e:
self.log(str(e))
if __name__ == '__main__':
if len(sys.argv) == 1:
servicemanager.Initialize()
servicemanager.PrepareToHostSingle(Service)
servicemanager.StartServiceCtrlDispatcher()
else:
print('-main-')
win32serviceutil.HandleCommandLine(Service)
print('-main completed-')
опция -f не распознана Использование: 'ipykernel_launcher.py [опции] установить | обновить | удалить | запустить [...] | остановить | перезапустить [...] | отладка[...] 'Опции только для команд' install 'и' update ': --username domain \ username: Имя пользователя, которое служба должна запускать под паролем --password: пароль для имени пользователя --startup [manual | auto| отключено | отложено]: как запускается служба, по умолчанию = вручную --interactive: разрешить службе взаимодействовать с рабочим столом. Файл --perfmonini: файл .ini, используемый для регистрации данных монитора производительности. Файл --perfmondll: файл .dll, используемый при запросе службы к данным о производительности, default = perfmondata.dll Параметры только для команд «start» и «stop»:- секунд ожидания: подождите, пока служба фактически запустится или остановится. Если вы укажете --wait с опцией 'stop', служба и все зависимые службы будут остановлены, каждая из которых ожидает определенный период. Возникла исключительная ситуация, используйте% tb для просмотра полной трассировки.
SystemExit: 1