2017-02-22 16 views
0

Я хотел бы узнать, можно ли получить список (в виде текстового файла) всех приложений, установленных на моем ПК, и их местоположения.Список приложений и путей Windows

Например, у меня установлен Google Chrome на моем компьютере. Мне нравится эта фотография как:

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

Или что-то в этом роде. Я видел программы в powershell и других языках, которые, используя реестр, находят тот или иной, но не оба. Как (и на каком языке) это возможно?

Редактировать: Главная проблема заключается в том, что ключи реестра для путей и удаления приложений (где я могу найти имена) состоит в том, что их ключи имеют совершенно разные имена. Но, по-видимому, это возможно, так как утилита «Изменить или удалить программу» содержит оба. Есть ли способ программно преобразовать это в текстовый файл?

+1

Возможно, вы этого не видели, потому что между списком установленных программ и основными исполняемыми файлами для этих программ нет прямой корреляции. Вы можете найти способ, скажем, получить все исполняемые файлы для данной записи в «Программы и функции», но многие программы имеют несколько исполняемых файлов. Что именно вы ищете? –

+0

Возможный дубликат [Проверить, установлена ​​ли программа, если она переходила к следующей оболочке] (http://stackoverflow.com/questions/42228400/check-if-program-is-installed-if-so-go-to-next- powershell) – BenH

+0

В частности, вы хотели бы найти значение InstallLocation в разделе «Удалить ключи». – BenH

ответ

0

Я думаю, что я нашел собственный ответ, используя пакетный код. Мне было интересно, как 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" 
    ) 
) 

Эти ярлыки могут быть запущены вместо EXEs, чтобы открыть программы.

2

Можно использовать этот Однострочник:

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 

Drawback: Не все приложения установить InstallPath свойство.

0

Я бы не стал сильно беспокоиться об этом с помощью ключа Uninstall и просто искать каталог файлов программ.

Эта команда дает имя каждого ехе внутри подкаталог программных файлов:

$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-разрядная ОС в противном случае падение второй путь.

Это не является совершенным либо, так как он может возвращать имя нескольких EXEs но, по крайней мере, вам не придется беспокоиться об особенностях инсталлятора, какие элементы реестра он пишет и т.д.

Смежные вопросы