Hola a todos,
Estoy tratando de convertir mi aplicaci�n en un servicio de windows uando: win32serviceutil.ServiceFramework y luego utilizo py2exe para compilar. Sigo el ejemplo publicado en: http://islascruz.org/html/index.php?gadget=StaticPage&action=Page&id=6 La cuestion es que compila y cuando hago "myservice.exe -install" todo parece ir bien, chequeo si el servicio aparece en la lista, y est�, pero cuando intento correrlo me sale un mensaje que dice qlgo asi como que el servicio se inici� y luego se detuvo.� Tengo entendido que el sevicio debe estar corriendo constantemente, incluso sin hacer nada. Si lo corro en IDE de python puedo ver que se mantiene corriendo y funciona correctamente, no entiendo por qu� no ocurre lo mismo cuando es compilado, instalado e iniciado. Este es el c�digo que intento hacer funcionar: # fichero RunningAsService.py import win32serviceutil import win32service import win32event import os import sys import time from ThreadedXMLRPCServer import ThreadedXMLRPCServer_BasicAuth, SecureXMLRPCServer, ServerFunction from processServerConfig import ReadServerFile from ProcessAuth import ReadAuthFile import RunSystem #aqui hay una clase que es la que corre a secure y a server en diferentes hilos.(tomada del tutorial) #secure es una instancia de SecureXMLRPCServer #server lo es�de ThreadedXMLRPCServer_BasicAuth # la configuracion para secure y server la leo de un fichero xml que contiene entre otras cosas�los #puertos, una lista de ip autorizados, una lista de usuarios autorizados,..., y el path para los ficheros cert.pem # y key.pem usados por secure para ssl def main(): ��������� sys.path.insert(0,os.getcwd())# viene en el ejemplo del link, creo es para poder�detener el servicio ��������� import RunSystem ��������� secure = ...#creo mi�instancia ��������� server = ...#creo mi�instancia ����������service = RunSystem.RunServers(secure,None,server)# corren en hilos separados class XmlRPCService(win32serviceutil.ServiceFramework): ��� _svc_name_ = 'ServiceTest' ��� _scv_display_name_ ='Servicio XML-RPC de prueba' ��� 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) ������� sys.stopservice = "true"# seg�n el tutorial es necesario para poder detener el servicio, ya que no hay foma �������# de accederlo desde aqu� ������� win32event.SetEvent(self.hWaitStop) ��� def SvcDoRun(self): ������� main() Nota: para correrlo en el IDE de python no utilizo esta clase, simplemente invoco al main(), que es lo que haria el m�todo SvcDoRun() cuando ya este compilado el servicio. ####################del m�dulo RunSystem.py, para correr los servidores endiferentes hilos class RunServers: ��� def __init__(self, server1, report_server,server2 = None): ������� self.server1 = server1 ������� self.server2 = server2 ������� self.report_server = report_server ������� thread.start_new(self.run1, tuple()) ������� thread.start_new(self.run2, tuple()) ������� thread.start_new(self.run_report_server, tuple()) ������� while True:# se mantiene corriendo hasta que sea detenido usando herramientas administrativas servicios ����������� if getattr(sys,'stopservice', False):# para detener el servicio(ver def SvcStop(self)�) ��������������� sys.exit() ��������������� time.sleep(0.3)# no entiendo esto para que es ��� def run1(self): ������� if self.server1: ����������� self.server1.serve_forever() ��� def run2(self): ������� if self.server1: ����������� self.server2.serve_forever() ��� def run_report_server(self): ������� if self.report_server: ����������� self.report_server.serve_forever() ��� def run_date_checker(self): ������� print "Hello"#estoy lo voy a utilizar luego para correr otro hilo(por ahora no se utiliza) ##### ###### El setup.py que utilizo para compilar el servicio es el siguiente setup(name = 'XMLRPCService', version = '1.0.0.0',service = ['RunningAsService'],include = ['win32serviceutil','win32service', �������������������������������������������������� 'win32event','ThreadedXMLRPCServer', ������������������������������������������������� 'processServerConfig','ProcessAuth', �������������������������������������������������� 'RunSystem','os','re','time','sys','base64', ��������������������������������������������������� 'SocketServer','ssl','xmlrpclib','pythoncom','SimpleXMLRPCServer','thread']�) Tengo mis dudas sobre los par�metros de setup. Tengo entendido que service debe contener los m�dulos que implementan clases de servicio(win32serviceutil.ServiceFramework), pero no se si tengo que ponerlas tambi�n en el include, tampoco me queda claro si por ejemplo, al incluir un m�dulo que importa, por ejemplo, a�SimpleXMLRPCServer no es necesario ya poner SimpleXMLRPCServer en la lista include o si todo lo que importe de una forma u otra tiene que aparecer expl�citamente en esta lista. Disculpen haber escrito tanto.� Gracias de antemano. Boris. --- La mejor vacuna contra el virus A(H1N1) es la higiene personal
_______________________________________________ Python-es mailing list [email protected] http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
