【问题标题】:List windows applications and paths列出 windows 应用程序和路径
【发布时间】:2017-02-25 22:51:54
【问题描述】:

我想知道是否可以获取我的 PC 上安装的所有应用程序及其位置的列表(作为文本文件)。

例如,我的计算机上安装了 Google Chrome。我希望它显示为:

Google Chrome
C:\Program Files\...(path)...\chrome.exe

或者类似的东西。 我见过 powershell 和其他语言的程序,它们使用注册表找到一个或另一个,但不能同时找到两者。这如何(以及以何种语言)实现?

编辑:这里的主要问题是应用程序路径和卸载的注册表项(我可能会在其中找到名称)是它们的键具有完全不同的名称。但这可能是可能的,因为“更改或删除程序”实用程序包含两者。有没有办法以编程方式将其转换为文本文件?

【问题讨论】:

  • 您可能没有看到它,因为已安装程序列表与这些程序的主要可执行文件之间没有任何直接关联。例如,您可能想出一种方法来获取程序和功能中给定条目的所有可执行文件,但是许多程序带有多个可执行文件。您到底在寻找什么?
  • 特别是您可能会在卸载密钥中寻找 InstallLocation 值。
  • 这不是你想要的吗? blogs.technet.microsoft.com/heyscriptingguy/2011/11/13/…我在本地运行它,大多数位置都出现了。

标签: windows powershell registry


【解决方案1】:

可以使用这种单线:

 Get-ChildItem -Path HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | Get-ItemProperty |   ? { -not [string]::IsNullOrEmpty($_.DisplayName) } |  Sort-Object -Property DisplayName | Select-Object -Property DisplayName, DisplayVersion, InstallLocation

缺点:并非所有应用程序都设置InstallPath 属性。

【讨论】:

    【解决方案2】:

    我想我已经使用批处理代码找到了自己的答案。当我意识到使用了开始菜单条目时,我想知道 Cortana 是如何快速搜索已安装的程序及其名称的。下面这段代码查找已安装程序快捷方式的名称和位置(不包括卸载程序):

    @echo off
    break > names.txt
    break > locations.txt
    set "curpath=%cd%"
    cd "C:\ProgramData\Microsoft\Windows\Start Menu"
    FOR /R %%G IN ("*.lnk") DO (
        echo "%%~nG" |findstr /i "install">nul || (
            echo %%~nG >> "%curpath%/names.txt"
            echo %%G >> "%curpath%/locations.txt"
        )
    )
    cd "C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs"
    FOR /R %%G IN ("*.lnk") DO (
        echo "%%~nG" |findstr /i "install">nul || (
            echo %%~nG >> "%curpath%/names.txt"
            echo %%G >> "%curpath%/locations.txt"
        )
    )
    

    可以运行这些快捷方式而不是 EXE 来打开程序。

    【讨论】:

      【解决方案3】:

      我不会过多地使用卸载键,只需搜索程序文件目录。

      此命令为您提供程序文件子目录中每个 exe 的名称:

      $ProgPath = $env:ProgramFiles, ${env:ProgramFiles(x86)}
      dir $ProgPath -Directory | Select -Property Name, @{n="ExeFiles";e={ (dir $_.FullName -Filter *.exe -Recurse -Depth 1).Name -join ","}} | Where ExeFiles
      

      假设它是 64 位操作系统,否则丢弃第二条路径。

      它也不完美,因为它可能会返回多个 exe 的名称,但至少您不必担心安装程序的特殊性,它会写入哪些注册表项等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        相关资源
        最近更新 更多