Служба 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/.

Другие вопросы по тегам