[python-win32] keeping a COM server alive

Mark Hammond mhammond at skippinet.com.au
Thu Feb 17 14:55:38 CET 2005


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



More information about the Python-win32 mailing list