使用c ++在Windows上列出所有已安装的程序

时间:2013-04-14 10:13:27

标签: x86 64-bit installed-applications

我遇到了这个问题。 我必须在Windows操作系统(包括x86和x64)上列出所有已安装的程序,包括Internet Explorer和其他Windows组件。

我尝试了一些解决方案:

  1. 将WMI与查询"SELECT * FROM Win32_Product"一起使用,但结果没有Internet Explorer,而在x64上,它不会列出所有程序。

  2. 阅读注册表:我尝试在x86上阅读:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall,但未列出IE。

  3. 总结,我需要在x86和x64操作系统上列出所有已安装的程序和Windows组件(如IE)。

    任何人都可以帮助我吗? 非常感谢你。

1 个答案:

答案 0 :(得分:1)

尝试使用此WMI查询脚本,看看它是否也缺少x64内容。如果没有,则在x64命令shell下再试一次。我怀疑你是在32位模式下执行你的程序:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile("c:\scripts\software.tsv", True)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_Product")
objTextFile.WriteLine "Caption" & vbtab & _
"Description" & vbtab & "Identifying Number" & vbtab & _
"Install Date" & vbtab & "Install Location" & vbtab & _
"Install State" & vbtab & "Name" & vbtab & _
"Package Cache" & vbtab & "SKU Number" & vbtab & "Vendor" & vbtab _
 & "Version"
For Each objSoftware in colSoftware
 objTextFile.WriteLine objSoftware.Caption & vbtab & _
 objSoftware.Description & vbtab & _
 objSoftware.IdentifyingNumber & vbtab & _
 objSoftware.InstallLocation & vbtab & _
 objSoftware.InstallState & vbtab & _
 objSoftware.Name & vbtab & _
 objSoftware.PackageCache & vbtab & _
 objSoftware.SKUNumber & vbtab & _
 objSoftware.Vendor & vbtab & _
 objSoftware.Version
Next
objTextFile.Close

来源: Enumerating Installed Software