Python获取Windows 已安装程序列表

重装电脑时,为了给原电脑做个备份,但程序列表太长,又不想一次性全安装拖慢系统速度。先导出列表,用到时再装。

搜了一下,使用winreg库可以实现,代码参考了:https://www.cnblogs.com/flankershen/p/7568828.html, 原代码中使用python2语法,winreg是python 3中的最新的库,python 2时是_winreg。

代码修改如下:

import os
import socket
import winreg
  
#检测主机名,并将主机名作文检测结果的文件名
hostname = socket.gethostname()
file = open(r'%s.txt' % hostname, 'w')#保存在当前目录,使用新建模式
  
#定义检测位置
sub_key = [
    r'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall', 
    r'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall'
]
  
software_name = []
for i in sub_key:
    key = winreg.OpenKey(
        winreg.HKEY_LOCAL_MACHINE, 
        i, 
        0, 
        winreg.KEY_ALL_ACCESS
    )
    for j in range(0, winreg.QueryInfoKey(key)[0]-1):
        try:
            key_name = winreg.EnumKey(key, j)
            key_path = i + '\\' + key_name
            each_key = winreg.OpenKey(
                winreg.HKEY_LOCAL_MACHINE, 
                key_path, 
                0, 
                winreg.KEY_ALL_ACCESS
            )
            DisplayName, REG_SZ = winreg.QueryValueEx(each_key, 'DisplayName')
            DisplayName = DisplayName.encode('utf-8')
            software_name.append(DisplayName)
        except WindowsError:
            pass
  
 
software_name = list(set(software_name))
software_name = sorted(software_name)
try: 
    for result in software_name:
        app_name=str(result,encoding='utf-8')        
        file.write(app_name + '\n')
        print(app_name)
except Exception as e:
    print(e)
finally:
    file.close()
	

但直接运行会提示

发生异常: PermissionError
[WinError 5] 拒绝访问。

用管理员模式打开VSCODE,可以运行成功。
或者管理员模式打开命令行运行.py文件。

你可能感兴趣的:(python,windows,python,microsoft)