Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python windows service "Error starting service: The service did not respond to the start or control request in a timely fashion"

Tags:

python

service

I am running the code below by python win_service.py install from the normal command prompt, where I get access denied error.

Installing service TestService

Error installing service: Access is denied. (5)

which I was able to resolve when I started the command prompt by starting as administrator.

I was able to install the service, but I was unable to start the service.

Service installed

Starting service TestService

Error starting service: The service did not respond to the start or control request in a timely fashion.

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket

class AppServerSvc (win32serviceutil.ServiceFramework):
    _svc_name_ = "TestService"
    _svc_display_name_ = "Test Service"

    def __init__(self,args):
        win32serviceutil.ServiceFramework.__init__(self,args)
        self.hWaitStop = win32event.CreateEvent(None,0,0,None)
        socket.setdefaulttimeout(60)

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)

    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_,''))
        self.main()

    def main(self):
        print "running"

if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(AppServerSvc)

What am doing wrong, is there any other way to install the service that would solve the issue and how to dynamically run it as administrator.

like image 535
Annamalai Nagappan Avatar asked Dec 17 '16 15:12

Annamalai Nagappan


3 Answers

I know this is old but I was stuck on this forever. For me, this specific problem was solved by copying this file - pywintypes36.dll

From -> Python36\Lib\site-packages\pywin32_system32

To -> Python36\Lib\site-packages\win32

like image 51
Chip Avatar answered Nov 11 '22 16:11

Chip


It's possible that your service is not starting because it's unable to find the executable. I had a similar issue that was solved by adding some pywin32 related directories to my system path. You can do this using setx:

setx /M PATH "%PATH%;C:\Python27;C:\Python27\Scripts;C:\Python27\Lib\site-packages\pywin32_system32;C:\Python27\Lib\site-packages\win32"

Try running this in a cmd window with admin privileges and adjust the paths to match your own python installation.

like image 11
dslosky Avatar answered Nov 11 '22 18:11

dslosky


Finally, the solution for this.

First step:

USE pyinstaller to create a standalone executable file, i.e.:

  pip install pyinstaller

  pyinstaller yourproject.py

  cd dist\yourproject

  yourproject.exe install

Second step:

Note that. When the Windows Service calls "your program", it gives a time to answer according the Service Development Protocol. All of the codes above, are not starting the service. Please, change your code as below:

if __name__ == '__main__':
   if len(sys.argv) > 1:
       # Called by Windows shell. Handling arguments such as: Install, Remove, etc.
       win32serviceutil.HandleCommandLine(JobManager)
   else:
       # Called by Windows Service. Initialize the service to communicate with the system operator
       servicemanager.Initialize()
       servicemanager.PrepareToHostSingle(JobManager)
       servicemanager.StartServiceCtrlDispatcher()
like image 6
Giuliano Avatar answered Nov 11 '22 16:11

Giuliano