# -*- coding: utf-8 -*-
import winreg
import re
import win32con, win32api
def find_exe_path(exe_name):
try:
path = None
upper_keyword = exe_name.upper()
sub_key = r'SoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsCompatibility AssistantStore'
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, sub_key, 0, win32con.KEY_READ)
info = win32api.RegQueryInfoKey(key)
for i in range(info[1]):
value = win32api.RegEnumValue(key, i)
exe_path = value[0].upper()
if upper_keyword in exe_path:
path = value[0]
break
return path
except Exception:
return None
def closeReg(key):
winreg.CloseKey(key)
def openReg(key):
return winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key)
def queryVal(key, name):
(value, type) = winreg.QueryValueEx(key, name)
return value
def find_exe(keypath, softname):
key = openReg(keypath)
i = 0
result = ""
try:
while 1:
name = winreg.EnumKey(key, i)
path = keypath + "\" + name
subkey = openReg(path)
try:
value = str(queryVal(subkey, 'DisplayName')).upper()
if str(softname.upper()) in value:
value = queryVal(subkey, 'DisplayVersion')
result = value
closeReg(subkey)
break
except:
pass
finally:
closeReg(subkey)
i += 1
except:
pass
closeReg(key)
return result
def get_exe_path_name_val(_name):
try:
keypath1 = r"SOFTWAREMicrosoftWindowsCurrentVersionUninstall"
keypath2 = r"SOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall"
exe_path = find_exe_path(_name)
exe_val = None
exe_name = None
if exe_path:
print('路径:%s'% exe_path)
exe_path = (exe_path.replace('\','n'))
if exe_path:
exe_name = re.findall(r'n(.+?).exe', exe_path)[0]
print('程序名称:%s'% exe_name)
exe_val = find_exe(keypath1, exe_name)
if exe_val == "":
exe_val = find_exe(keypath2, exe_name)
if exe_val == "":
exe_val = find_exe(keypath2, _name)
print('程序版本:%sn'% exe_val)
return (exe_path,exe_name,exe_val)
except Exception as e:
print('获取exe版本信息异常: %s'% e)
return ('获取exe版本信息异常: %s'% e)
if __name__ == "__main__":
get_exe_path_name_val('Chrome')
get_exe_path_name_val('Firefox')
get_exe_path_name_val('Python')