COM “get property” with multiple arguments

你离开我真会死。 提交于 2019-12-10 15:12:39

问题


I'm trying to call WindowsInstaller.Installer.ProductsEx from python, and can't figure out how to make it work.

Here's a vbscript version of what I want to call from python:

dim msi, products
set msi = CreateObject("WindowsInstaller.Installer")
set products = msi.ProductsEx("", "s-1-1-0", 7)

I think my issue is ProductsEx is a read-only get property that takes 3 arguments, and I don't know how to convince win32com or comtypes to call it that way.

I tried:

>>> import win32com.client
>>> msi = win32com.client.Dispatch('WindowsInstaller.Installer')
>>> products = msi.ProductsEx('', 's-1-1-0', 7)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<COMObject WindowsInstaller.Installer>", line 2, in ProductsEx
pywintypes.com_error: (-2147352573, 'Member not found.', None, None)

and similiar using comtypes:

>>> import comtypes.client
>>> msi = comtypes.client.CreateObject('WindowsInstaller.Installer')
>>> products = msi.ProductsEx['', 's-1-1-0', 7]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\comtypes\client\dynamic.py", line 46, in __getitem__
**dict(_invkind=comtypes.automation.DISPATCH_PROPERTYGET))
  File "C:\Python27\lib\site-packages\comtypes\automation.py", line 768, in Invoke
 args))
_ctypes.COMError: (-2147352571, 'Type mismatch.', ('TypeError: Parameter 1', (('', 's-1-1-0', 7),)))

I think I got closer in comtypes since DISPATCH_PROPERTYGET is what I want to do. In both libs I tried every syntax I could think of:

  • msi.ProductsEx(['', 's-1-1-0', 7])
  • msi.ProductsEx[['', 's-1-1-0', 7]]
  • msi.ProductsEx['']['s-1-1-0'][7]
  • None instead of ''
  • tuples instead of lists

How do I call a COM "get" property with multiple arguments from python?


回答1:


Use Get/Set

msi.GetProductsEx("", "s-1-1-0", 7)


来源:https://stackoverflow.com/questions/23497599/com-get-property-with-multiple-arguments

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!