列出 windows 个应用程序和路径

List windows applications and paths

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

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

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

或者类似的东西。 我看到过 powershell 和其他语言的程序,它们使用注册表找到一个或另一个,但不能同时找到两个。这怎么可能(用什么语言)?

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

一个人可以使用这个单线:

 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 属性。

我不会太在意卸载键,只需搜索程序文件目录即可。

此命令为您提供程序文件子目录中每个 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 位 OS 否则放弃第二条路径。

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

我想我已经找到了自己的答案,使用批处理代码。当我意识到使用开始菜单条目时,我想知道 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来打开程序。