def start(self, start_driver, driver_exists=False): # we are in native API mode so not starting the service/driver if not start_driver: return True self.use_existing_service = (win32serviceutil.QueryServiceStatus( SERVICE_NAME)[1] == win32service.SERVICE_RUNNING) if self.use_existing_service: self.driver_loaded = True if logger().DEBUG: logger().log("[helper] service '{}' already running".format( SERVICE_NAME)) logger().log( "[helper] trying to connect to existing '{}' service...". format(SERVICE_NAME)) else: #if self.use_existing_service: # _handle_error( "connecting to existing '{}' service failed (service is not running)".format(SERVICE_NAME) ) try: win32serviceutil.StartService(SERVICE_NAME) win32serviceutil.WaitForServiceStatus( SERVICE_NAME, win32service.SERVICE_RUNNING, 1) self.driver_loaded = True if logger().DEBUG: logger().log( "[helper] service '{}' started".format(SERVICE_NAME)) except pywintypes.error as err: _handle_error( "service '{}' didn't start: {} ({:d})".format( SERVICE_NAME, err.args[2], err.args[0]), err.args[0]) self.driverpath = win32serviceutil.LocateSpecificServiceExe( SERVICE_NAME) return True
def SvcDoRun(self): servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_, '')) os.chdir( os.path.dirname( win32serviceutil.LocateSpecificServiceExe(self._svc_name_))) repeater.main()