Динамический поиск Chrome на компьютере конечного пользователя с ОС Windows

Динамический поиск Chrome на компьютере конечного пользователя с ОС Windows

Итак, я искал это везде, где только мог, и не могу понять. Я надеюсь, что ответ очень прост. Вот ситуация:

Я создаю ссылку на ярлык для конечного пользователя. Назовем его "shortcut.lnk". Можно предположить, что у него установлен Chrome и что "myFolder" находится на рабочем столе. Главное, чтобы это приложение открывалось в Chrome, а не в браузере пользователя по умолчанию. В настоящее время у меня в качестве "Target" shortcut.lnk указано следующее:

%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe --app=%USERPROFILE%\Desktop\myFolder\path\to\app.html

Это работает на 3 машинах, на которых я это тестировал. Однако я заметил из исследования, что Chrome иногда устанавливается в AppData или другие места вместо Program Files.

У меня такой вопрос: есть ли способ динамически определить, где установлен Chrome на компьютере с Windows, чтобы я мог прикрепить его к «Target» shortcut.lnk?

решение1

Есть ли способ динамически определить, где установлен Chrome?

Следующая команда определит, где установлен Chrome, и установит CHROMEPATHпеременную среды на это значение:

for /f "usebackq tokens=1,2,3,4,5" %a in (`reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ /s /f \chrome.exe ^| findstr Application`) do set CHROMEPATH=%c%d%e

Пример вывода:

echo %CHROMEPATH%
C:\ProgramFiles(x86)\Google\Chrome\Application\chrome.exe

Для использования в пакетном файле вам необходимо удвоить проценты следующим образом:

for /f "usebackq tokens=1,2,3,4,5" %%a in (`reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ /s /f \chrome.exe ^| findstr Application`) do set CHROMEPATH=%%c%%d%%e

решение2

Я столкнулся с той же проблемой, и поскольку скрипт, созданный @DavidPostill, не работал на PowerShell, я создал свой собственный, основанный на его ответе.

function Find-PSFilePathInRegistry {
    param (
        [string]$FileName
    )
    $str = reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ /s /f \chrome.exe | findstr Default
    # regex to find the drive letter until $FileName
    if ($str -match "[A-Z]\:.+$FileName") {
        return @{
            success = $true
            path = $Matches[0]
        }
    }
    else {
        return @{
            success = $false
            path = ""
        }
    }
}

Использовать следующим образом:

$res = Find-FilePathInRegistry "chrome.exe"
$res.success
True
$res.path
C:\Program Files\Google\Chrome\Application\chrome.exe

Если не найдено, $res.successбудет $false.

решение3

Итак, я столкнулся с необходимостью этого для поиска приложений, чтобы создавать новые ярлыки на конечных точках. Эта функция сэкономила мне ТАК МНОГО ВРЕМЕНИ, так как моя потребность найти исполняемый файл Chrome в среде, когда Chrome иногда находится в двух местах, сделала мою жизнь намного проще! Спасибо! Я немного подправил его и хочу поделиться, так что...

<#
.SYNOPSIS
Searches the Windows registry for the path of a specified application file.

.DESCRIPTION
The Find-PSFilePathInRegistry function searches the Windows registry for the path of a specified application file. It allows you to locate the installation directory of an application by searching through the registry keys associated with installed software.

.PARAMETER FileName
Specifies the name of the application file to search for in the registry.

.OUTPUTS
Outputs a custom object with the following properties:
- Success: Indicates whether the search was successful (true/false).
- Path: The full path to the specified application file.
- AppDir: The directory where the application file is located.

.EXAMPLE
Find-PSFilePathInRegistry -FileName "chrome.exe"
Searches the Windows registry for the path of the Google Chrome executable file.

.EXAMPLE
Find-PSFilePathInRegistry -FileName "notepad.exe"
Searches the Windows registry for the path of the Notepad executable file.

.NOTES
The function searches the following registry keys:
- HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
- HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths
#>
function Find-PSFilePathInRegistry {
    param (
        [string]$FileName
    )

    # Define an array of common registry locations where application paths are stored
    $registryKeys = @(
        "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths",
        "HKCU:\Software\Microsoft\Windows\CurrentVersion\App Paths"
    )

    # Iterate through each registry key
    foreach ($key in $registryKeys) {
        if (Test-Path $key) {
            # Get the default value (which usually contains the path) for the specified file name
            $value = Get-ItemProperty -Path "$key\$FileName" -Name "(default)" -ErrorAction SilentlyContinue
            if ($value) {
                $appDir = Split-Path -Path $value.'(default)' -Parent
                return @{
                    Success = $true
                    Path = $value.'(default)'
                    AppDir = $appDir
                }
            }
        }
    }

    # If the path is not found in any of the registry keys, return failure
    return @{
        Success = $false
        Path = ""
        AppDir = ""
    }
}

Связанный контент