我正在尝试通过命令行列出添加/删除程序列表 (WinXP/Win7) 中显示的所有已安装应用程序。据我了解,对于 Win7,它被称为“程序和功能”。
我试过 wmic,但它只列出了使用 MSI 安装的程序。我试过查询注册表(HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 和 wow6432node)。
我仍然无法捕获 Spotify(很好的例子);它出现在添加/删除部分,但不在这些位置。
有什么想法吗?
—多姆
答案1
看起来这可以通过wmic
命令完成
尝试这个:
wmic product
显示计算机上安装的所有内容的列表
来源:
http://www.sepago.de/d/helge/2010/01/14/how-to-list-all-installed-applications-from-the-command-line
http://technet.microsoft.com/en-us/library/bb742610.aspx#ECAA
该页面显示它适用于 Windows Vista 和 7,但我也在 Windows XP 上测试过 wmic
从 Windows 命令行获取已安装应用程序的列表
此外,此页面解释了检查注册表项的方法可能不准确
http://community.spiceworks.com/how_to/show/2238-how-add-remove-programs-works
以下是有关使用 wmic 可以做什么的更多信息:
http://betanews.com/2011/01/14/wmic-the-best-command-line-tool-你从未使用过/
来自此网站,专门针对您的问题:
该程序还可以提供有关系统许多其他方面的详细信息。命令如下:
wmic产品列表简介
wmic 服务列表简介
wmic 进程列表简要
wmic 初创企业名单简介
例如,将列出您安装的软件、服务、正在运行的进程和 Windows 启动程序。
答案2
我认为您不会对任何 cmd 方法感到满意,因为它们并不完整。如果您对 Powershell 满意,那么这给了我一切:
If (!([Diagnostics.Process]::GetCurrentProcess(). Path -match '\\syswow64\\')) {
$unistallPath = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
$unistallWow6432Path = "\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\"
@(
if (Test-Path "HKLM:$unistallWow6432Path" ) { Get-ChildItem "HKLM:$unistallWow6432Path"}
if (Test-Path "HKLM:$unistallPath" ) { Get-ChildItem "HKLM:$unistallPath" }
if (Test-Path "HKCU:$unistallWow6432Path") { Get-ChildItem "HKCU:$unistallWow6432Path"}
if (Test-Path "HKCU:$unistallPath" ) { Get-ChildItem "HKCU:$unistallPath" }
) |
ForEach-Object { Get-ItemProperty $_.PSPath } |
Where-Object {
$_.DisplayName -and !$_.SystemComponent -and !$_.ReleaseType -and !$_.ParentKeyName -and ($_.UninstallString -or $_.NoRemove)
} |
Sort-Object DisplayName |
Select-Object DisplayName
} else {
"You are running 32-bit Powershell on 64-bit system. Please run 64-bit Powershell instead." |
Write-Host -ForegroundColor Red
}