This is related the COM instance model implemented on the COM server
side, not on the client side. Specifically, in the start-up code of
the COM server application, there should be a call to
CoRegisterClassObject(CLSID, pUnk, dwClsContext, flags, &dwRegister).
The key point is the fourth parameter “flags”. It determines during
run-time whether the COM server exe can be started as single instance or
multiple instances.
See this MSDN for more details:
https://learn.microsoft.com/en-us/windows/win32/api/combaseapi/nf-combaseapi-coregisterclassobject?redirectedfrom=MSDN
Bottom line, this depends on the COM server implementation, not
something the client side can control.
Wuping
------ Original Message ------
Date: Mon, 26 Feb 2024 20:12:29 +1100
From: Aviv Bergman <bergm...@gmail.com>
To: python-win32@python.org
Subject: [python-win32] Creating COM objects in a new process
Message-ID: <394b0459-dd10-42fb-a1c9-2e70066ee...@gmail.com>
Content-Type: text/plain; charset=UTF-8; format=flowed
Hi
I'm trying to create several COM objects, each in a new process, but it
seems DispatchEx is reusing the existing COM server process, is there
any way to force creating new objects in a new process?
I'm using a python COM server,? minimal example attached
Thanks
Aviv
---------
import os
import pythoncom
class CTest:
??? _reg_progid_ = "STO.test"
??? _reg_clsid_ = "{13704826-80EC-4205-ADCE-ADBE5B741731}"
??? _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
??? _public_methods_ = ["test"]
??? def __init__(self):
??????? pass
??? def test(self):
??????? return "process = " + str(os.getpid())
if __name__ == "__main__":
??? import win32com.server.register
??? win32com.server.register.UseCommandLine(CTest)
>>> import win32com.client
>>> o1 = win32com.client.DispatchEx("STO.test")
>>> o2 = win32com.client.DispatchEx("STO.test")
>>> o1.test()
'process = 26764'
>>> o2.test()
'process = 26764'
>>>
------------------------------
Message: 2
Date: Mon, 26 Feb 2024 10:24:51 -0500
From: Mark Hammond <mhamm...@skippinet.com.au>
To: Aviv Bergman <bergm...@gmail.com>, python-win32@python.org
Subject: Re: [python-win32] Creating COM objects in a new process
Message-ID: <71e75e18-eb08-46e2-bfc9-316f7290c...@skippinet.com.au>
Content-Type: text/plain; charset="utf-8"; Format="flowed"
I'm not aware of anything, other than arranging for the existing process
to terminate.
Cheers,
Mark
On 2024-02-26 4:12 a.m., Aviv Bergman wrote:
Hi
I'm trying to create several COM objects, each in a new process, but
it seems DispatchEx is reusing the existing COM server process, is
there any way to force creating new objects in a new process?
I'm using a python COM server,? minimal example attached
Thanks
Aviv
---------
import os
import pythoncom
class CTest:
??? _reg_progid_ = "STO.test"
??? _reg_clsid_ = "{13704826-80EC-4205-ADCE-ADBE5B741731}"
??? _reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
??? _public_methods_ = ["test"]
??? def __init__(self):
??????? pass
??? def test(self):
??????? return "process = " + str(os.getpid())
if __name__ == "__main__":
??? import win32com.server.register
??? win32com.server.register.UseCommandLine(CTest)
>>> import win32com.client
>>> o1 = win32com.client.DispatchEx("STO.test")
>>> o2 = win32com.client.DispatchEx("STO.test")
>>> o1.test()
'process = 26764'
>>> o2.test()
'process = 26764'
>>>
_______________________________________________
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<https://mail.python.org/pipermail/python-win32/attachments/20240226/1bffda99/attachment-0001.html>
------------------------------
Subject: Digest Footer
_______________________________________________
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32
------------------------------
End of python-win32 Digest, Vol 247, Issue 3
********************************************
_______________________________________________
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32