Hi Jose,

That's great. My application was running under "paster serve" but was 
failing as a Windows service; a quick look at the application logs in 
event viewer as you suggested highlighted the problem as an ImportError 
which I fixed and it works perfectly now.

Would you be willing to post your code to the Wiki and write a short 
article at http://pylonshq.com/project for others who don't read the 
mailing list?

Many thanks,

James

 Jose Galvez wrote:
> Also win32all must be install, but I'm assuming that it is
> Jose
>
> James Gardner wrote:
>   
>> Hi Jose,
>>
>> An application like this would be extremely helpful and would be great 
>> to include in Pylons with a bit of tweaking but I just can't quite get 
>> it working on my machine. I can successfully update my INI file and then 
>> install a service without errors but no application appears to actually 
>> run when I start the installed service, there are no Python applications 
>> in Task Manager for example. Which port does the application run on? Is 
>> there a step I'm missing?
>>
>> Best wishes,
>>
>> James
>>
>>
>> jose wrote:
>>   
>>     
>>> I've been playing around with pylons lately on windows and saw that
>>> there
>>> is no equivalent to demonize in paste for windows. So after looking
>>> around at
>>> lots of code I stole and modified some example windows service code
>>> from cherrypy.  Basically if you put the windowservice.py fine in the
>>> same file as your inifile, and run it it will add a new section to the
>>> ini file which will allow you to define a windows service, running it
>>> again a second time will allow you to install, and run the newly
>>> defined service.  I'm including the file, hopefully someone else will
>>> find it useful, and if anyone has suggestions on how to improve the
>>> spaghetti code It would be much appreciated.
>>>
>>> Jose
>>>
>>>
>>> === WindowsService.py ====
>>>
>>> """
>>> The most basic (working) Windows service possible.
>>> Requires Mark Hammond's pywin32 package.
>>> Most of the code was taken from a  CherryPy 2.2 example of how to set
>>> up a service
>>> """
>>>
>>> import win32serviceutil
>>> from paste.script.serve import ServeCommand as Server
>>> import os, sys
>>> import ConfigParser
>>>
>>> import win32service
>>> import win32event
>>>
>>> class DefaultSettings(object):
>>>     def __init__(self):
>>>         os.chdir(os.path.dirname(__file__))
>>>         # find the ini file
>>>         self.ini = [x for x in os.listdir('.')
>>>             if os.path.splitext(x)[1].lower().endswith('ini')]
>>>         # create a config parser opject and populate it with the ini
>>> file
>>>         c = ConfigParser.SafeConfigParser()
>>>         c.read(self.ini[0])
>>>         self.c = c
>>>
>>>     def getDefaults(self):
>>>         '''
>>>         Check for and get the default settings
>>>         '''
>>>         if (
>>>             (not self.c.has_section('winservice')) or
>>>             (not self.c.has_option('winservice', 'service_name')) or
>>>             (not self.c.has_option('winservice',
>>> 'service_display_name')) or
>>>             (not self.c.has_option('winservice',
>>> 'service_description'))
>>>             ):
>>>             print 'setting defaults'
>>>             self.setDefaults()
>>>         service_name = self.c.get('winservice', 'service_name')
>>>         service_display_name = self.c.get('winservice',
>>> 'service_display_name')
>>>         service_description = self.c.get('winservice',
>>> 'service_description')
>>>         iniFile = self.ini[0]
>>>         return service_name, service_display_name, service_description,
>>> iniFile
>>>
>>>     def setDefaults(self):
>>>         '''
>>>         set and add the default setting to the ini file
>>>         '''
>>>         if not self.c.has_section('winservice'):
>>>             self.c.add_section('winservice')
>>>         self.c.set('winservice', 'service_name', 'WSCGIService')
>>>         self.c.set('winservice', 'service_display_name', 'WSCGI windows
>>> service')
>>>         self.c.set('winservice', 'service_description', 'WSCGI windows
>>> service')
>>>         cfg = file(self.ini[0], 'wr')
>>>         self.c.write(cfg)
>>>         cfg.close()
>>>         print '''
>>> you must set the winservice section service_name, service_display_name,
>>> and service_description options to define the service
>>> in the %s file
>>> ''' % self.ini[0]
>>>         sys.exit()
>>>
>>>
>>> class MyService(win32serviceutil.ServiceFramework):
>>>     """NT Service."""
>>>
>>>     d = DefaultSettings()
>>>     service_name, service_display_name, service_description, iniFile =
>>> d.getDefaults()
>>>
>>>     _svc_name_ = service_name
>>>     _svc_display_name_ = service_display_name
>>>     _svc_description_ = service_description
>>>
>>>     def __init__(self, args):
>>>         win32serviceutil.ServiceFramework.__init__(self, args)
>>>         # create an event that SvcDoRun can wait on and SvcStop
>>>         # can set.
>>>         self.stop_event = win32event.CreateEvent(None, 0, 0, None)
>>>
>>>     def SvcDoRun(self):
>>>         os.chdir(os.path.dirname(__file__))
>>>         s = Server(None)
>>>         s.run([self.iniFile])
>>>         win32event.WaitForSingleObject(self.stop_event,
>>> win32event.INFINITE)
>>>
>>>     def SvcStop(self):
>>>         self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
>>>         #cherrypy.server.stop()
>>>         #win32event.SetEvent(self.stop_event)
>>>         self.ReportServiceStatus(win32service.SERVICE_STOPPED)
>>>         sys.exit()
>>>
>>> if __name__ == '__main__':
>>>     win32serviceutil.HandleCommandLine(MyService)
>>>
>>> ==========================================
>>>
>>>
>>>     
>>>   
>>>     
>>>       
>>     
>>   
>>     
>
>
> >
>   


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"pylons-discuss" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/pylons-discuss
-~----------~----~----~----~------~----~------~--~---

Reply via email to