答案1
“程序和功能”也可以通过控制面板文件 appwiz.cpl 启动,其中列出了所有以定义的方式注册的应用程序,以便出现在此列表中。这通常是用户通常可以删除或修改已安装应用程序的主要入口点。
我说的是传统意义上的,正如 Windows 现在所拥有的,在新的“设置”选项下有一个“应用和功能”页面 (%Windir%\ImmersiveControlPanel\SystemSettings.exe)。此应用程序列表还包括现在称为 Windows Modern 应用程序(又称 metro、全屏或 Windows Store 应用程序)的应用程序。由于问题专门针对程序和功能,因此本回答不会涵盖这些内容。
作为开发人员,有多种方法可以创建安装程序来打包应用程序,例如使用 Windows Installer,然后使用以下工具包创建 MSI 文件威克斯或 InstallShield。然后是开发人员创建的自定义安装程序。无论如何,为了确保您的应用程序出现在上面的列表中,你只需要定义两个值尽管通常有更多的标准值,但这些是:
- 显示名称
- 卸载路径
根据所安装的应用程序,“卸载程序”项可以在以下注册表位置找到:
32 位计算机:
- HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
- HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
64 位计算机:
- HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
- HKCU:\SOFTWARE\Wow6432nodeMicrosoft\Windows\CurrentVersion\Uninstall
- HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
- HKLM:\SOFTWARE\Wow6432node\Microsoft\Windows\CurrentVersion\Uninstall
在哪里:64 位应用程序上的 32 位应用程序通常位于 Wow6432node 下。HKCU 下的程序是针对用户的安装程序,而不是针对计算机的安装程序,有时是安装程序中显示的一个选项。
因此,要枚举所有已安装的应用程序(就像 Explorer.exe 一样),当您启动程序和功能时,您必须考虑上述键下的值。
还有一点需要注意,应用程序可以使用 DWORD 将自己“隐藏”在该列表中SystemComponent
。该值可以是 1 或 0,其中 1 表示应用程序从列表中隐藏。我猜想这样做的目的是为了让用户通常无法管理的系统组件(例如 .NET)保持隐藏状态。然而,供应商通常会使用这种方法,他们会为套件安装多个组件,然后创建统一的卸载程序,以便更轻松地删除整个应用程序并按正确的顺序删除每个组件。
因此,以下 PowerShell 命令将枚举上述每个 Uninstall 键,并且当 SystemComponent 不为 1 且存在 DisplayName 值时,将打印 DisplayName:
foreach ($UKey in 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*','HKLM:\SOFTWARE\Wow6432node\Microsoft\Windows\CurrentVersion\Uninstall\*','HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*','HKCU:\SOFTWARE\Wow6432node\Microsoft\Windows\CurrentVersion\Uninstall\*'){foreach ($Product in (Get-ItemProperty $UKey -ErrorAction SilentlyContinue)){if($Product.DisplayName -and $Product.SystemComponent -ne 1){$Product.DisplayName}}}
当然,现在还有其他应用程序您可能归类为已安装,但如果它们没有在上述位置之一注册,它们将不会出现并且超出了问题的范围。
还有其他方法可以获取此列表中的项目,但由于仅返回基于 MSI 的应用程序,因此可能仅返回子集。
答案2
问题:是否有 powershell 或其他方法可以显示所有已安装的应用程序?
$outputFile = "$env:APPDATA\Installed_Applications.txt"
$OS_Architecture = $env:PROCESSOR_ARCHITECTURE
if($OS_Architecture -eq 'x86')
{
#write-host '32-bit'
$key = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"
}
else
{
#write-host '64-bit'
$key = "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
}
Get-ItemProperty $Key |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize |
Out-File $outputFile -Encoding UTF8 -Force
Start-Process $outputFile
这是一个自我提升脚本,用于获取具有管理员权限的所有内容:
cls
# Self-elevate the script if required
if (-Not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {
if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) {
#$CommandLine = "-File `"" + $MyInvocation.MyCommand.Path + "`" " + $MyInvocation.UnboundArguments
$CommandLine = $MyInvocation.InvocationName
Start-Process -FilePath PowerShell.exe -Verb Runas -ArgumentList $CommandLine
Exit
}
}
$outputFile = "$env:APPDATA\Installed_Applications.txt"
$OS_Architecture = $env:PROCESSOR_ARCHITECTURE
if($OS_Architecture -eq 'x86')
{
#write-host '32-bit'
$key = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"
}
else
{
#write-host '64-bit'
$key = "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
}
Get-ItemProperty $Key |
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize | Out-String -Width 300 |
Out-File $outputFile -Encoding UTF8 -Force
Get-AppxPackage -AllUsers |
Out-File -Append $outputFile -Encoding UTF8 -Force
Start $outputFile
答案3
之后输入打开 Powershell运行它作为管理员
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize
PowerShell 将为您提供所有程序的列表,其中包括版本、开发人员名称,甚至安装日期。
不过,您可能希望将其导出到文件中,这也很容易。您只需使用 > 符号发送输出,并添加要创建的新文本文件的路径即可。例如:
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize > C:\Users\Lori\Documents\InstalledPrograms-PS.txt