rom*_*das 39 windows wmi windows-installer
尝试使用WMI获取已安装的Windows XP程序列表.使用wmic,我试过:
wmic /output:c:\ProgramList.txt product get name,version
Run Code Online (Sandbox Code Playgroud)
我得到了许多已安装程序的列表,但在根据显示的"添加/删除程序"清除此列表后,我看到添加/删除程序的GUI中列出的程序多于WMI查询.我需要使用另一个WMI查询来安装其余的程序吗?或者还有其他一些我需要寻找的地方吗?
此外,WMI查询中列出的两个已安装的程序不在"添加/删除程序"中.知道为什么吗?
Rob*_*upt 29
我相信您的语法是使用WMI中的Win32_Product类.一个原因是此类仅显示使用Windows Installer安装的产品(请参阅此处).卸载注册表项是您最好的选择.以下是一些监视注册表项的代码.
评论更新:
卸载注册表项是列出已安装内容和未安装内容的标准位置.它是"添加/删除程序"列表用于填充应用程序列表的位置.我确信有些应用程序没有在此位置列出自己.在这种情况下,您必须采用另一种更粗糙的方法,例如搜索Program Files目录或查看Start Menu Programs List.这两种方式都绝对不理想.
在我看来,查看注册表项是最好的方法.
Bob*_*toe 13
所有添加/删除程序实际上正在读取此注册表项:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
Run Code Online (Sandbox Code Playgroud)
除了已安装程序最常用的注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE \微软\的Windows\CurrentVersion \卸载
wmic命令和添加/删除程序还查询另一个注册表项:
HKEY_CLASSES_ROOT \安装\产品
列表中显示的软件名称从此键中的数据条目的值中读取,名为:ProductName
从上述两个位置删除某个产品的注册表项将使其无法显示在添加/删除程序列表中.这不是卸载程序的方法,它只是从已知的Windows中删除条目作为已安装的软件.
因为,通过使用此方法,您将失去使用添加/删除列表中的"删除"按钮从系统中清除软件的机会; 建议在删除文件之前将注册表项导出到文件中.将来,如果您决定将该项目带回列表,则只需运行您存储的注册表文件即可.
我一直在使用Inno Setup作为安装程序.我只使用64位Windows 7.我发现正在写入注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node \微软\的Windows\CurrentVersion \卸载
我还没有弄清楚如何让WMI报告这个列表(尽管程序列在程序和功能中已安装).如果我弄明白,我会记得在这里报告.
更新:
安装在64位计算机上的32位程序的条目将进入该注册表位置.这里写的更多:
http://mdb-blog.blogspot.com/2010/09/c-check-if-programapplication-is.html
请参阅我的评论,其中描述了同一帖子中的32位与64位行为:
不幸的是,似乎没有办法让WMI列出添加/删除程序列表中的所有程序(也就是Windows 7中的程序和功能,不确定Vista).我当前的代码已经放弃了WMI,转而使用注册表.查询注册表的代码本身比使用WMI更容易.示例代码在上面的链接中.
不是最好的,但是否实用的方法:
使用HijackThis。(旧版本:HijackThis)
运行劫持,单击“打开其他工具部分”按钮

单击“打开卸载管理器”

单击保存列表(*.txt),按照提示选择“是”,记事本将打开您的添加/删除程序列表。

您可以使用 powershell 和批处理文件在一行中获取它:
@echo off
Powershell /command "Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-List"
Pause
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
160610 次 |
| 最近记录: |