Might be late but i found an answer based on List of installed programs as answers regarding which
dont work for user installed programs or programs not in PATH.
import winreg, win32con
def foo(hive, flag):
aReg = winreg.ConnectRegistry(None, hive)
aKey = winreg.OpenKey(aReg, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", 0, win32con.KEY_READ | flag)
count_subkey = winreg.QueryInfoKey(aKey)[0]
arr = []
for i in range(count_subkey):
try:
asubkey_name = winreg.EnumKey(aKey, i)
asubkey = winreg.OpenKey(aKey, asubkey_name)
arr.append([winreg.QueryValueEx(asubkey, "DisplayName")[0], winreg.QueryValueEx(asubkey, "UninstallString")[0]] )
except EnvironmentError:
continue
return arr
x = foo(win32con.HKEY_LOCAL_MACHINE, win32con.KEY_WOW64_32KEY)
y = foo(win32con.HKEY_LOCAL_MACHINE, win32con.KEY_WOW64_64KEY)
z = foo(win32con.HKEY_CURRENT_USER, 0)
That will give you a list of installed programs as a list you can search print([x for x in x+y+z if "My Application Name" in x])
However that does not tell you where it is located.
def bar(hive, flag):
aReg = winreg.ConnectRegistry(None, hive)
aKey = winreg.OpenKey(aReg, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\Folders', 0, win32con.KEY_READ | flag)
count_subkey = winreg.QueryInfoKey(aKey)
arr = []
for i in range(count_subkey[1]):
try:
arr.append(winreg.EnumValue(aKey, i)[0])
except EnvironmentError:
continue
return arr
w = bar(win32con.HKEY_LOCAL_MACHINE, win32con.KEY_WOW64_64KEY)
That will give you a list of install folders and subfolders which you can easily search through print('\n'.join(x for x in [x for x in w if "My Application Name" in x]))