【问题标题】:Executing wmi.Registry.EnumKey gives type mismatch error执行 wmi.Registry.EnumKey 给出类型不匹配错误
【发布时间】:2015-12-17 07:37:49
【问题描述】:

我试图使用 wmi.Registry.EnumKey() 查找特定注册表项下的所有子项。但它不断抛出类型不匹配错误。我使用了下面的代码 sn-p :

import _winreg
import wmi
r = wmi.Registry ()
result, names = r.EnumKey (hDefKey=_winreg.HKEY_LOCAL_MACHINE,sSubKeyName=r"Software\Microsoft\Windows\CurrentVersion\Uninstall")

观察到错误:

Traceback(最近一次调用最后一次):

文件“”,第 1 行,在模块中
调用

中的文件“build\bdist.win-amd64\egg\wmi.py”,第 431 行

handle_com_error()

文件“build\bdist.win-amd64\egg\wmi.py”,第 241 行,在 handle_com_error 中

提高类(com_error=err)

wmi.x_wmi: x_wmi: 意外的 COM 错误 (-2147352567, 'Exception ', (0,u'SWbemProperty', u'类型不匹配', None, 0, -2147217403), 无)

任何帮助都会很棒。

【问题讨论】:

    标签: python registry wmi


    【解决方案1】:

    您使用的是 64 位 python 解释器吗?我遇到了同样的问题,结果它不喜欢 _winreg 值,所以只需使用 Windows 注册表配置单元常量覆盖它们,如 winreg.h 所示;您可以在下面找到一份副本: http://www.math.uiuc.edu/~gfrancis/illimath/windows/aszgard_mini/bin/MinGW/include/winreg.h

    import wmi
    HKLM = 0x80000002
    r = wmi.Registry()
    result, names = r.EnumKey (hDefKey=HKLM,sSubKeyName=r"Software\Microsoft\Windows\CurrentVersion\Uninstall")
    

    【讨论】:

    • 我在 32 位版本上检查了我的代码,它工作正常。但我无法在 64 位版本上运行它。我什至替换了 winreg.h 文件,但我仍然面对Unexpected COM Error。 @jcannell
    猜你喜欢
    • 1970-01-01
    • 2013-03-14
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多