OK.  Iceberg, yours shouldn't be too difficult, but it's going to take a bit of time.

For Fran and Massimo, I've attached a patched winservice.py  This will show a traceback of the particular error in the Window's Event Viewer.  That should help us narrow the problem.  Fran, you can copy this into your web2py.gluon directory.  Massimo, if you could put this in a checkout and compile it (I don't have the time right now to figure out compiling), Iceberg and I can debug the binary distribution.

Thanks,
  tim

Iceberg wrote:
Thank for your message, Tim.

For me, I only tried the binary distribution. After web2py.exe -W
install, a service named "web2py Service" appears in the windows
service console. However, web2py.exe -W start does not work. Details
is in my last post (not this one).

Rumors said that starting as a service is only possible for a source
distribution. So I think Fran's problem would be a little easier than
mine. :-S

Thanks for your concern.
Iceberg

On Jan5, 10:53pm, Timothy Farrell <tfarr...@swgen.com> wrote:
  
Sorry guys.  I generally only watch the list at work.  Being it a holiday, I'm a little behind on this issue.  Let me recap the symptoms so you know that I understand...
Source Distribution windows service installs but does not run for Fran.
Neither source nor binary Distribution installs (or runs) for Iceberg.
Is that correct?
Iceberg from your last message, it looks like you're having a path issue.  I'll get a fresh machine and start with the Binary distribution and get back to you.
-tim
    


  

-- 
Timothy Farrell <tfarr...@swgen.com>
Computer Guy
Statewide General Insurance Agency (www.swgen.com)

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

"""
This file is part of web2py Web Framework (Copyrighted, 2007)
Developed by Massimo Di Pierro <mdipie...@cs.depaul.edu>
and Limodou <limo...@gmail.com>
License: GPL v2
"""
import time, os, sys, traceback
import win32serviceutil
import win32service
import win32event
import servicemanager
import _winreg
from fileutils import up

__all__=['web2py_windows_service_handler']

class Service(win32serviceutil.ServiceFramework):
    _svc_name_ = '_unNamed'
    _svc_display_name_ = '_Service Template'
    def __init__(self, *args):
        win32serviceutil.ServiceFramework.__init__(self, *args)
        self.stop_event = win32event.CreateEvent(None, 0, 0, None)
    def log(self, msg):         
        servicemanager.LogInfoMsg(str(msg))
    def SvcDoRun(self):
        self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
        try:
            self.ReportServiceStatus(win32service.SERVICE_RUNNING)
            self.start()
            win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE)
        except:
            self.log(traceback.format_exc(sys.exc_info))
            self.SvcStop()
        self.ReportServiceStatus(win32service.SERVICE_STOPPED)
    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        try:
            self.stop()
        except:
            self.log(traceback.format_exc(sys.exc_info))
        win32event.SetEvent(self.stop_event)
        self.ReportServiceStatus(win32service.SERVICE_STOPPED)
    # to be overridden
    def start(self): pass
    # to be overridden
    def stop(self): pass

class Web2pyService(Service):
    _svc_name_ = 'web2py'
    _svc_display_name_ = 'web2py Service'
    _exe_args_ = 'options'
    server = None
    
    def chdir(self):
        try:
            h = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, 
r'SYSTEM\CurrentControlSet\Services\%s' % self._svc_name_)
            cls = _winreg.QueryValue(h, 'PythonClass')
            dir = os.path.dirname(cls)
            os.chdir(dir)
            return True
        except:
            self.log("Can't change to web2py working path, server is stopped")
            return False

    def start(self):
        self.log("web2py server starting")
        if not self.chdir(): return
        if len(sys.argv) == 2:
            opt_mod = sys.argv[1]
        else:
            opt_mod = self._exe_args_
        options = __import__(opt_mod, [], [], '')
        from main import HttpServer
        self.server = HttpServer(ip=options.ip,port=options.port,
                          password=options.password,
                          pid_filename=options.pid_filename,
                          log_filename=options.log_filename,
                          ssl_certificate=options.ssl_certificate,
                          ssl_private_key=options.ssl_private_key,
                          numthreads=options.numthreads,
                          server_name=options.server_name,
                          request_queue_size=options.request_queue_size,
                          timeout=options.timeout,
                          shutdown_timeout=options.shutdown_timeout,
                          path=options.folder)
        try: 
            self.server.start()
        except:
            #self.server.stop()
            self.server = None
            raise

    def stop(self):
        self.log("web2py server stopping")
        if not self.chdir(): return
        if self.server:
            self.server.stop()
        time.sleep(1)

def web2py_windows_service_handler(argv=None, opt_file='options'):
    path = os.path.dirname(__file__)
    classstring = os.path.normpath(os.path.join(up(path), 
'gluon.winservice.Web2pyService'))
    if opt_file:
        Web2pyService._exe_args_ = opt_file
        win32serviceutil.HandleCommandLine(Web2pyService, 
serviceClassString=classstring,argv=['', 'install'])
    win32serviceutil.HandleCommandLine(Web2pyService, 
serviceClassString=classstring,argv=argv)

if __name__=='__main__':
    web2py_windows_service_handler()

Reply via email to