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: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Behalf Of Frank Guenther
> Sent: Thursday, 17 February 2005 11:22 PM
> To: python-win32@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@python.org
> http://mail.python.org/mailman/listinfo/python-win32

_______________________________________________
Python-win32 mailing list
Python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to