importosimportwin32serviceutilimportwin32serviceimportwin32eventfromcubicweb.etwist.serverimport(CubicWebRootResource,reactor,server,parsePOSTData,channel)fromloggingimportgetLogger,handlersfromcubicwebimportset_log_methodsfromcubicweb.cwconfigimportCubicWebConfigurationascwcfglogger=getLogger('cubicweb.twisted')logger.handlers=[handlers.NTEventLogHandler('cubicweb')]os.environ['CW_INSTANCES_DIR']=r'C:\etc\cubicweb.d'os.environ['USERNAME']='cubicweb'classCWService(object,win32serviceutil.ServiceFramework):_svc_name_=None_svc_display_name_=Noneinstance=Nonedef__init__(self,*args,**kwargs):win32serviceutil.ServiceFramework.__init__(self,*args,**kwargs)cwcfg.load_cwctl_plugins()set_log_methods(CubicWebRootResource,logger)server.parsePOSTData=parsePOSTDatadefSvcStop(self):self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)logger.info('stopping %s service'%self.instance)reactor.stop()self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)defSvcDoRun(self):self.ReportServiceStatus(win32service.SERVICE_START_PENDING)logger=getLogger('cubicweb.twisted')logger.info('starting %s service'%self.instance)try:# create the siteconfig=cwcfg.config_for(self.instance)root_resource=CubicWebRootResource(config,False)website=server.Site(root_resource)# serve it via standard HTTP on port set in the configurationport=config['port']or8080logger.info('listening on port %s'%port)reactor.listenTCP(port,channel.HTTPFactory(website))root_resource.init_publisher()root_resource.start_service()logger.info('instance started on %s',root_resource.base_url)self.ReportServiceStatus(win32service.SERVICE_RUNNING)reactor.run()exceptException,e:logger.error('service %s stopped (cause: %s)'%(self.instance,e))logger.exception('what happened ...')self.ReportServiceStatus(win32service.SERVICE_STOPPED)