I have two COM servers. One works, the other doesn't, using the same python client code, which seems to work differently behind the scenes. I'm profiling both with SysInternals' ProcMon. Windows7x64, running 32-bit python 2.7.3. The python code isn't much more than:

    import sys, os
    import win32.client

cli = win32.client.Dispatch('Server.Application.1') # 'Broken.Application.1')

Profile for python client, working server:
1.  Looks for 'Working.Server.1' in HKCU\Software\Classes, doesn't find it.
2.  Looks for it in HKCR\Working.Server.1, finds it.
3. Gets CLSID from above CLSID subkey.
4.  Looks for CLSID in HKCU\Software\Classes\Wow6432Node, doesn't find it.
*5. Looks for it in HKCR\Wow6432Node\CLSID\{8...}, finds it.*
6. Dispatch() succeeds and we carry on...

Profile for python client, broken server:
1. Looks for 'Broken.Application.1' in HKCU\Software\Classes, doesn't find it.
2.  Looks for it in HKCR\Broken.Application.1, finds it.
3. Gets CLSID from above CLSID subkey.
4. Looks for CLSID in HKCR\CLSID\{4...}, doesn't find it.
*5. **Stops looking and gives up, **throwing pywintypes.com_error: (-2147221164, 'Class not registered', None, None)*

So why does it stop looking for one but keep looking for the other?

Comparing registry entries for HKCR\Working.Server.1 and HKCR\Broken.Application.1, there's no difference. Each refers to its CLSID, and permissions are the same.

Comparing HKCR\Wow6432Node\CLSID\{8...} and HKCR\Wow6432Node\CLSID\{4...}, I see some differences, but the python client never got as far as finding this second one, so how could that matter?



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

Reply via email to