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]))