AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1603763
Accepted
bluesquare
bluesquare
Asked: 2020-11-21 10:45:47 +0800 CST2020-11-21 10:45:47 +0800 CST 2020-11-21 10:45:47 +0800 CST

如何运行单个命令来显示 Windows 10 中所有已安装的应用程序?

  • 772

为了跟进和扩展这个问题,我想知道如何获取应用程序列表,如 appwiz.cpl 中所示,它始终显示所有已安装的应用程序。

从这里,我们知道 InstallShield、Wise、NSIS 等其他安装程序不会向 WMIC 注册应用程序,因此

wmic product get name,version

向我展示了一些应用程序,包括 Visual C++、Apple 软件更新和其他应用程序,但很多都没有,例如:

  • 7-Zip
  • 谷歌浏览器
  • 火狐浏览器
  • Mozilla 雷鸟
  • VLC

是否有可以显示所有已安装应用程序的 powershell 或其他方法?

windows-10 installer
  • 3 3 个回答
  • 3378 Views

3 个回答

  • Voted
  1. Best Answer
    HelpingHand
    2020-11-22T07:38:06+08:002020-11-22T07:38:06+08:00

    也可以使用控制面板文件 appwiz.cpl 启动的“程序和功能”列出了所有以定义方式注册的应用程序,以便出现在此列表中。传统上,这是使用户能够删除或修改已安装的应用程序的主要入口点。

    我传统上说,就像 Windows 现在一样,在新的设置选项下有一个“应用程序和功能”页面 (%Windir%\ImmersiveControlPanel\SystemSettings.exe)。此应用程序列表还包括现在称为 Windows Modern 应用程序,即 Metro、全屏或 Windows 应用商店应用程序。由于该问题专门针对程序和功能,因此此答案将不涵盖这些内容。

    作为开发人员,有多种方法可以创建安装程序来打包应用程序,无论是使用 Windows Installer,还是使用WiX或 InstallShield 等工具包创建 MSI 文件。然后是开发人员创建的自定义安装程序。在任何情况下,为了确保您的应用程序出现在上面的列表中,您只需要定义两个值,尽管通常有更多的标准值,它们是:

    • 显示名称
    • 卸载路径

    根据安装的应用程序,可以在以下注册表位置找到“卸载程序”键:

    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 位应用程序通常位于 Wow6432 节点下。HKCU 下的那些是用户的安装程序,而不是计算机,有时是安装程序中的一个选项。

    因此,要像 Explorer.exe 那样枚举所有已安装的应用程序,当您启动程序和功能时,您必须考虑上述键下的值。

    还有一点需要注意,应用程序可以使用SystemComponentDWORD “隐藏”自己,使其不出现在此列表中。该值可以是 1 或 0,其中 1 将从列表中隐藏应用程序。我假设的意图是让 .NET 等通常不会由用户管理的系统组件保持隐藏状态。然而,这通常由供应商使用,他们为一个套件安装多个组件,然后创建一个统一的卸载程序,以便更轻松地删除整个应用程序并以正确的顺序删除每个组件。

    因此,以下 PowerShell 命令将枚举上述每个卸载键,并且在 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 的应用程序。

    • 1
  2. Hackoo
    2021-02-16T23:01:28+08:002021-02-16T23:01:28+08:00

    问题:是否有可以显示所有已安装应用程序的 powershell 或其他方法?

    请参阅如何在 Windows 上创建已安装程序的列表


    $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
    
    • 0
  3. desbest
    2021-12-14T02:44:57+08:002021-12-14T02:44:57+08:00

    打开 Powershell并以管理员身份运行后输入此内容

    Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize
    

    PowerShell 将为您提供所有程序的列表,包括版本、开发人员的名称,甚至是您安装它的日期。

    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
    

    导出到文本文件的已安装程序列表

    这是来源。

    • 0

相关问题

  • VMware Workstation USB 仲裁服务无法自动启动

  • 如何在域和 Linux 活动目录中启用指纹传感器

  • 资源管理器侧面板中的桌面外壳快捷方式

  • 为什么我不能将文件从 Android 发送到 Windows 10?

  • 在多个文件上打开方式?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve