From: Ludovic R. <lre...@re...> - 2004-09-15 11:57:50
|
Hi Everybody, I'm investigating methods to produce win2000 services(.exe) from python class (.py). It seems that py2exe is the most suitable tool for this kind of operations. Untill now I had no problem using py2exe, which I found easy and handy to use. But it seems that I'm too dumb to start/register the service. I've been walking around google to find out a solution, but NoWay...every body seem= s to face issue with Win32 services, but none seems to be able to describe the whole process. So, here is my service code (myservice.py): import win32serviceutil import win32service import win32event class myservice(win32serviceutil.ServiceFramework): def __init__(self, args): _svc_name_ =3D "myservice" _scv_display_name_ =3D "any comments." self.hWaitStop =3D win32event.CreateEvent(None, 0, 0, None) def scvStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) def SvcDoRun(self): win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINIT= E) if __name__ =3D=3D "__main__": win32serviceutil.HandleCommandLine(myservice) AND my setup script(build.py): from distutils.core import setup import py2exe setup(service=3D["myservice"]) ...Building the exe seems to be no problem...but when i want to install/register from command prompt, it always sends me to: Traceback (most recent call last): File "boot_service.py", line 21, in RuntimeError: No service classes found I've been trying various way to register/start, such as: myservice -install myservice -install -user:bebru-reenaerl\test myservice -install --user:bebru-reenaerl\test myservice --install -user:bebru-reenaerl\test myservice install -user:bebru-reenaerl\test myservice /install /register ...and many more.. I'm using python 2.4 with pywin32-202.win32-py2.4 and py2exe.0.5.3(for python 2.4) Could anyone help please? thanks in advance, --=20 Ludovic Reenaers |if (getLife(ME)=3D=3DNull):ME.Life.stop('bullet')| |
From: Thomas H. <th...@py...> - 2004-09-15 15:43:28
|
"Ludovic Reenaers" <lre...@re...> writes: > Hi Everybody, > > I'm investigating methods to produce win2000 services(.exe) from python > class (.py). It seems that py2exe is the most suitable tool for this kind > of operations. > Untill now I had no problem using py2exe, which I found easy and handy to > use. > > But it seems that I'm too dumb to start/register the service. I've been > walking around google to find out a solution, but NoWay...every body seems > to face issue with Win32 services, but none seems to be able to describe > the whole process. > > So, here is my service code (myservice.py): > > import win32serviceutil > import win32service > import win32event > class myservice(win32serviceutil.ServiceFramework): > def __init__(self, args): > _svc_name_ = "myservice" > _scv_display_name_ = "any comments." > self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) > def scvStop(self): > self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) > win32event.SetEvent(self.hWaitStop) > def SvcDoRun(self): > win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) > if __name__ == "__main__": > win32serviceutil.HandleCommandLine(myservice) > > AND my setup script(build.py): > > from distutils.core import setup > import py2exe > setup(service=["myservice"]) > > > ...Building the exe seems to be no problem...but when i want to > install/register from command prompt, it always sends me to: > > Traceback (most recent call last): > File "boot_service.py", line 21, in > RuntimeError: No service classes found You should trust the traceback. In case you wonder what boot_service.py is - it is the main script that py2exe uses for a service, located in lib/site-packages/py2exe/boot_service.py. Reading the code in that module shows the problem: you must have a class attribute _svc_name_ in your class, so this should work. class myservice(win32serviceutil.ServiceFramework): _svc_name_ = "myservice" _scv_display_name_ = "any comments." def __init__(self, args): self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) The assignments to local variables _svc_name_ and _svc_display_name_ in your code are meaningless anyway... Thomas |
From: Ludovic R. <lre...@re...> - 2004-09-20 09:38:48
|
Hi Thomas, Thank you very much! the code is now compiling perfectly and run-time is suceeding.I guess it was a dummy error...even if I can't understand why those (_svc_name_ & _scv_display_name_) variables, have to be defined in the body of the class but not in any method...Really I'm lost I though this was forbiden...Would it be possible for you to explain me the use of such a syntax (sorry i'm new to the world of python)? Thanks in advance --=20 Ludovic Reenaers |if (getLife(ME)=3D=3DNull):ME.Life.magnify('Ganja')| > "Ludovic Reenaers" <lre...@re...> writes: > >> Hi Everybody, >> >> I'm investigating methods to produce win2000 services(.exe) from pytho= n >> class (.py). It seems that py2exe is the most suitable tool for this >> kind >> of operations. >> Untill now I had no problem using py2exe, which I found easy and handy >> to >> use. >> >> But it seems that I'm too dumb to start/register the service. I've bee= n >> walking around google to find out a solution, but NoWay...every body >> seems >> to face issue with Win32 services, but none seems to be able to descri= be >> the whole process. >> >> So, here is my service code (myservice.py): >> >> import win32serviceutil >> import win32service >> import win32event >> class myservice(win32serviceutil.ServiceFramework): >> def __init__(self, args): >> _svc_name_ =3D "myservice" >> _scv_display_name_ =3D "any comments." >> self.hWaitStop =3D win32event.CreateEvent(None, 0, 0, None) >> def scvStop(self): >> self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) >> win32event.SetEvent(self.hWaitStop) >> def SvcDoRun(self): >> win32event.WaitForSingleObject(self.hWaitStop, >> win32event.INFINITE) >> if __name__ =3D=3D "__main__": >> win32serviceutil.HandleCommandLine(myservice) >> >> AND my setup script(build.py): >> >> from distutils.core import setup >> import py2exe >> setup(service=3D["myservice"]) >> >> >> ...Building the exe seems to be no problem...but when i want to >> install/register from command prompt, it always sends me to: >> >> Traceback (most recent call last): >> File "boot_service.py", line 21, in >> RuntimeError: No service classes found > > You should trust the traceback. In case you wonder what boot_service.p= y > is - it is the main script that py2exe uses for a service, located in > lib/site-packages/py2exe/boot_service.py. > > Reading the code in that module shows the problem: you must have a clas= s > attribute _svc_name_ in your class, so this should work. > > class myservice(win32serviceutil.ServiceFramework): > _svc_name_ =3D "myservice" > _scv_display_name_ =3D "any comments." > def __init__(self, args): > self.hWaitStop =3D win32event.CreateEvent(None, 0, 0, None) > > The assignments to local variables _svc_name_ and _svc_display_name_ in > your code are meaningless anyway... > > Thomas > > |