[python-win32] keeping a COM server alive

Frank Guenther xeoicq at netscape.net
Fri Feb 25 07:50:16 CET 2005


Hi,

thanks for your answer.

I changed the localserver.py like you suggested by skipping to call 
pythoncom.EnableQuitMessage().
But what is the best way to close the pythonw process when desired? I 
tried to call sys.exit() in the COM-Server Modul and got an error.

A patch to specify a custom driver program would be to insert a 
registration-related attribute on the COM Object  (e.g.  
_reg_custom_driver_)  with the  absolute path  of the file of custom 
driver program?
Would this be sufficient when py2exe is used to compile the hole server?

What about an extension of the _reg_clsctx_ attribute to take a switch 
like pythoncom.CLSCTX_LOCAL_SERVER_NO_QUIT?
 

Ciao,
   Frank

mhammond at skippinet.com.au wrote:

>Currently there is no nice solution to your problem.  I'm sure you
>understand it is by design pythonw.exe closes when the last reference is
>closed, and why your work-around is effective.
>
>When hosted as a localserver, win32com\server\localserver.py is used as the
>main program.  This is configured in win32com\server\register.py, but there
>is no facility for overriding this.  I'd be happy to accept a patch which
>allowed you to specify a custom driver program, and this would be free to
>ignore the shutdown request (ie, simply not call
>pythoncom.EnableQuitMessage())
>
>Mark
>
>  
>
>>-----Original Message-----
>>From: python-win32-bounces at python.org
>>[mailto:python-win32-bounces at python.org]On Behalf Of Frank Guenther
>>Sent: Thursday, 17 February 2005 11:22 PM
>>To: python-win32 at python.org
>>Subject: [python-win32] keeping a COM server alive
>>
>>
>>Hi,
>>
>>I posted this some days ago in comp.lang.python
>><http://groups-beta.google.com/group/comp.lang.python> but
>>didn't get a
>>real solution.
>>Perhaps someone here can help me.
>>
>>I have implemented a local COM Server with win32com framework
>>where all
>>clients
>>use the same global object (test_obj). So far it works, but when the
>>last client is closed the gobal object is deleted because the
>>pythonw.exe is
>>closed. When I create a new client a new pythonw process is
>>started. I
>>need that the
>>new client gets the same global object. How can I prevent the
>>Python COM
>>enviornment (pythonw.exe) to close when no client exist. I
>>figured out a
>>workaround, but there must be real solution to the problem.
>>
>>The code looks like:
>>
>>class test:
>>    ...
>>
>>test_obj=test()
>>
>>class test_F:
>>
>>    _reg_clsid_ = ...
>>    _reg_progid_ = "test.cl"
>>    _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
>>    _public_methods_ = ...
>>
>>    def __init__(self):
>>        self.delegate=test_obj
>>        ....
>>    ...
>>
>>####Workaround to keep the local server alive
>>if not __name__=='__main__':
>>    import win32com.client
>>    dummy=win32com.client.Dispatch("test.cl")
>>##########################################################
>>
>>if __name__=='__main__':
>>    import win32com.server.register
>>    win32com.server.register.UseCommandLine(test_F, debug=0)
>>
>>
>>
>>_______________________________________________
>>Python-win32 mailing list
>>Python-win32 at python.org
>>http://mail.python.org/mailman/listinfo/python-win32
>>    
>>
>
>  
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/python-win32/attachments/20050225/06a621b3/attachment.htm


More information about the Python-win32 mailing list