Есть ли способ получить путь установки всех установленных программ? - PullRequest
0 голосов
/ 17 февраля 2019

я работаю над личным проектом, который открывает другие программы, и в настоящее время я использую текстовый файл, в котором я должен вручную ввести путь к файлу exe, как этот

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

Я хотел бы знать, есть лиспособ получить список всех расположений исполняемых файлов?Я знаю, что, как получить список установленных программ и некоторый путь к файлу, используя

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* 

, но это не дает полного пути.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

этот код предназначен для powershell, но идея применима и к другим языкам программирования.[ ухмылка ] считывает 32/64 битные ключи удаления для ключей local machine/all users & current user reg.

function Get-LD_InstalledSoftware
    <#
    .SYNOPSIS
        Get Installed software via the registry.

    .NOTES
        Original source ...
        Find Installed Software - Power Tips - PowerTips - IDERA Community
        - http://community.idera.com/powershell/powertips/b/tips/posts/find-installed-software

        Version
        - 2017.09.22.23.35.49 
        == added Publisher search item
        - 2018.09.21.10.04.24 
        == changed name to avoid collision with other similar code
    #>
    {
    [CmdletBinding()]
    Param
        (
        # Wildcard characters allowed - and recommended.
        [Parameter()]
        [string]
        $DisplayName = '*',

        # Wildcard characters allowed.
        [Parameter()]
        [string]
        $DisplayVersion = '*',

        # Use 'yyyyMMdd' format.
        [Parameter()]
        [string]
        $InstallDate = '*',

        # Wildcard characters allowed.
        [Parameter()]
        [string]
        $Publisher = '*',

        # Wildcard characters allowed, but normally this otta be left to the default.
        [Parameter()]
        [string]
        $UninstallString = '*'
        )

    # registry locations for installed software
    $Provider = 'Registry::'
    $All = 'HKEY_LOCAL_MACHINE\SOFTWARE'
    $Current = 'HKEY_CURRENT_USER\SOFTWARE'
    $64_32 = 'Microsoft\Windows\CurrentVersion\Uninstall\*'
    $32_on_64 = 'WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'

    $RPathAllUser = -join ($Provider, (Join-Path -Path $All -ChildPath $64_32))
    $RPathCurrentUser = -join ($Provider, (Join-Path -Path $Current -ChildPath $64_32))
    $RPathAllUser32 = -join ($Provider, (Join-Path -Path $All -ChildPath $32_on_64))
    $RPathCurrentUser32 = -join ($Provider, (Join-Path -Path $Current -ChildPath $32_on_64))

    # get all values from all 4 registry locations
    $Result = Get-ItemProperty -Path $RPathAllUser, $RPathCurrentUser, $RPathAllUser32, $RPathCurrentUser32 |
        # skip items without a DisplayName
        Where-Object DisplayName -ne $null |
        Where-Object {
            $_.DisplayName -like $DisplayName -and
            $_.DisplayVersion -like $DisplayVersion -and
            $_.InstallDate -like $InstallDate -and
            $_.Publisher -like $Publisher -and
            $_.UninstallString -like $UninstallString
            } |
        Sort-Object -Property DisplayName 

    $Result
    }

называется так ...

Get-LD_InstalledSoftware -DisplayName *chrome*

... вы получаете следующее ...

DisplayName     : Google Chrome
UninstallString : "C:\Program Files (x86)\Google\Chrome\Application\72.0.3626.109\Installer\setup.exe" --uninstall --system-level --verbose-logging
InstallLocation : C:\Program Files (x86)\Google\Chrome\Application
DisplayIcon     : C:\Program Files (x86)\Google\Chrome\Application\chrome.exe,0
NoModify        : 1
NoRepair        : 1
Publisher       : Google Inc.
Version         : 72.0.3626.109
DisplayVersion  : 72.0.3626.109
InstallDate     : 20190213
VersionMajor    : 3626
VersionMinor    : 109
PSPath          : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome
PSParentPath    : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
PSChildName     : Google Chrome
PSProvider      : Microsoft.PowerShell.Core\Registry

, что выходные данные могут быть легко отфильтрованывключать только желаемый уровень детализации.

0 голосов
/ 17 февраля 2019

Программисты используют Internet Explorer, ключевой компонент программирования в Windows.Поэтому глупо использовать программы, отличные от Windows.

Start chrome

Программы, перечисленные в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths, можно запускать в оболочке Windows, набрав их имя.В консоли вы можете принудительно выполнить его через оболочку, используя start.

Примечание. Вызовите все файлы something.exe, но фактический файл не обязательно должен быть исполняемым.

Итак

Win.exe
    @="C:\Windows\win.ini

при вводе win откроется win.ini.


Path

Добавление общей консольной программы в путьпозволяет вам просто ввести имя.

Из моей учетной записи PasteBin https://pastebin.com/YKEmChkc этот файл

Этот пакетный файл добавляет папку, в которой находится пакетный файл, к пути пользователя для будущей командыприглашения

REM One file follows
REM _AddThisFolderToPath.bat
REM This batch file adds the folder the batch file is in to the user's path for future command prompts
REM If the folder is already in the user's path the command is ignored
Setx path "%path%;%~dp0"
REM Optional add to the current path setting
REM Set path "%path%;%~dp0"
Pause

В командной строке введите path /?, set /?, setx /?, ftype /?, assoc /?.

Также см. поиск по умолчанию, CreateProcessиспользует.

1. Каталог, из которого загружено приложение.

2. Текущий каталог для родительского процесса.

3. 32-битная Windowsсистемный каталог.Используйте функцию GetSystemDirectory, чтобы получить путь к этому каталогу.

16-разрядный системный каталог Windows.Не существует функции, которая получает путь к этому каталогу, но она ищется.Имя этого каталога - System.

5. Каталог Windows.Используйте функцию GetWindowsDirectory, чтобы получить путь к этому каталогу.

6.Каталоги, перечисленные в переменной среды PATH.Обратите внимание, что эта функция не выполняет поиск пути для приложения, указанного в разделе реестра «Путь к приложению».Чтобы включить этот путь для каждого приложения в последовательность поиска, используйте функцию ShellExecute.


Пуск - Все программы - Стандартные - Щелкните правой кнопкой мыши Командную строку и выберите Запуск от имени администратора.Введите (или скопируйте и вставьте, щелкнув правой кнопкой мыши в окне командной строки и выбрав Вставить).Введите формат таблицы

 wmic /output:"%userprofile%\desktop\WindowsInstaller.html" product get /format:htable

или в формате формы

 wmic /output:"%userprofile%\desktop\WindowsInstaller.html" product get /format:hform

Это создаст HTML-файл на рабочем столе.

Примечание

Это не полный список.Это только продукты, установленные с помощью установщика Windows.Для всех нет никакой функции.

Однако, как я уже говорил в моем предыдущем посте, почти все перечислено в реестре.

Так что, чтобы увидеть это в командной строке

  reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s

или в файле

 reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s>"%userprofile%\desktop\WindowsUninstall.txt"

Чтобы увидеть его в блокноте в другом формате

Нажмите Пуск - Все программы - Стандартные - Щелкните правой кнопкой мыши Командная строка и выберите Запуск от имени администратора.Введите Regedit и перейдите к

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Щелкните правой кнопкой мыши клавишу удаления и выберите «Экспорт».Если вы сохраняете как reg-файл (есть также текстовый файл, они немного различаются по текстовому формату), вам нужно щелкнуть файл правой кнопкой мыши и выбрать «Edit» для его просмотра.

Для просмотра обновлений Windows

 wmic /output:"%userprofile%\desktop\WindowsUpdate.html" qfe  get /format:htable

.

...