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/

Responder a