Служба Windows Python - не отвечает на запуск / остановку встроенного exe (но работает в python)
Я впервые строю службу Windows, и я подумал, что она работает. Установка как python aservice.py install
работает нормально, и отвечает соответственно.
Однако, поскольку на машинах, на которых мне нужно будет установить этот сервис, не будет установлен python, я хотел встроить его в исполняемый файл, который может установить сервис. Несмотря на то, что исполняемый файл успешно установлен, при попытке запустить его вручную или через net start
или же sc start
Сервис не отвечает.
Запуск вручную возвращает - Ошибка 1053: Служба не ответила на запрос запуска или управления своевременно.
Net Start возвращает - Сервис не ответил на функцию контроля.
При установке с python он отвечает на все команды и работает нормально. Не уверен, что происходит во время процесса сборки, но я явно что-то упускаю
Использование Python 3.4 64 бит. Все ящики, которые нуждаются в обслуживании, также будут 64-битными.
Определение сервиса
class aservice(win32serviceutil.ServiceFramework):
_svc_name_ = "Test Login Service"
_svc_display_name_ = "Test Login Service"
_svc_description_ = "Test"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
import servicemanager
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,servicemanager.PYS_SERVICE_STARTED,(self._svc_name_, ''))
self.timeout = 3000
while 1:
# Wait for service stop signal, if I timeout, loop again
rc = win32event.WaitForSingleObject(self.hWaitStop, self.timeout)
# Check to see if self.hWaitStop happened
if rc == win32event.WAIT_OBJECT_0:
# Stop signal encountered
servicemanager.LogInfoMsg("aservice - STOPPED")
break
else:
servicemanager.LogInfoMsg("aservice - is alive and well")
...Doing Things...
servicemanager.LogInfoMsg("Logon Service Has Completed, Stopping")
time.sleep(10)
break
def ctrlHandler(ctrlType):
return True
if __name__ == '__main__':
win32api.SetConsoleCtrlHandler(ctrlHandler, True)
win32serviceutil.HandleCommandLine(aservice)
setup.py
`from distutils.core import setup
import py2exe
# setup.py
#
class Target:
def __init__(self, **kw):
self.__dict__.update(kw)
# for the versioninfo resources
self.version = "0.5.0"
self.company_name = "Company"
self.copyright = "no copyright"
self.name = "Test22"
myservice = Target(
description = 'Edit Logon Service',
modules = ['Logon_Service'],
cmdline_style='pywin32'
) `
команда сборки = python setup.py py2exe
Я пробовал setup.py с Windows также, который работает так же, но не печатает журналы консоли.
Есть идеи, как правильно установить этот сервис на компьютерах без Python?
Редактировать: setup.py работает
1 ответ
`from distutils.core import setup
import py2exe
# setup.py
#
class Target:
def __init__(self, **kw):
self.__dict__.update(kw)
# for the versioninfo resources
self.version = "0.5.0"
self.company_name = "Company"
self.copyright = "no copyright"
self.name = "Test22"
myservice = Target(
description = 'Edit Logon Service',
modules = ['Logon_Service'],
cmdline_style='pywin32'
) `
Убедитесь, что правильный файл pywintypes{version}.dll находится в папке C:/Windows/System 32/.