各キーの内容を調べHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
て返すためのPythonスクリプトを作成する必要があります。DisplayName
私はこれを出発点として使用しています(別のスタックオーバーフローポストにあります)
import _winreg
import wmi
c = wmi.WMI(namespace="default").StdRegProv
result, value = c.GetStringValue (
hDefKey=_winreg.HKEY_LOCAL_MACHINE,
sSubKeyName="SYSTEM\ControlSet001\Services\MRxDAV",
sValueName="ImagePath"
)
print value
それはうまくいきます。それは戻ります:
\SystemRoot\system32\drivers\mrxdav.sys
ただし、andを(有効な値に)変更するsSubKeyName
とsValueName
、非常に不安定に見え、None
頻繁に返されます。
例えば:
c = wmi.WMI(namespace="default").StdRegProv
result, value = c.GetStringValue (
hDefKey=_winreg.HKEY_LOCAL_MACHINE,
sSubKeyName="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{0E5D76AD-A3FB-48D5-8400-8903B10317D3}",
sValueName="DisplayName"
)
print value
これにより、None
印刷されます。
でも、
result, value = c.GetStringValue (
hDefKey=_winreg.HKEY_LOCAL_MACHINE,
sSubKeyName="SOFTWARE\Microsoft\Windows\CurrentVersion\Installer",
sValueName="InstallerLocation"
)
print value
正しい値を返します。
C:\Windows\SysWOW64\
次に試してみると:
result, value = c.GetStringValue (
hDefKey=_winreg.HKEY_LOCAL_MACHINE,
sSubKeyName="SOFTWARE\Microsoft\Windows\CurrentVersion\OptimalLayout",
sValueName="LayoutFilePath"
)
print value
戻り値None
私は生の文字列を試し、スラッシュをエスケープしましたが、どちらも機能しませんでした。私もこのGetExpandedString()
方法を試しましたが、同じように動作します。
値が長くなると失敗するように見えsSubKeyName
ますが、これは単なる直感です。
編集
Y__によって投稿されたコードの少しクリーンなバージョン
key = _winreg.OpenKey(
_winreg.HKEY_LOCAL_MACHINE,
"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{90140000-001F-040C-1000-0000000FF1CE}",
0, _winreg.KEY_READ | _winreg.KEY_WOW64_64KEY)
name = _winreg.QueryValueEx(key, "DisplayName")
print name[0]