在最终用户的 Windows 计算机上动态查找 Chrome

在最终用户的 Windows 计算机上动态查找 Chrome

因此,我搜索了所有我能想到的地方,但还是找不到答案。我希望答案很简单。情况如下:

我正在为最终用户创建一个快捷方式链接。我们将其命名为“shortcut.lnk”。我们可以假设他们确实安装了 Chrome,并且“myFolder”位于他们的桌面上。关键是此应用需要在 Chrome 中打开,而不是用户的默认浏览器。目前,我将以下内容作为快捷方式.lnk 的“目标”:

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

这在我测试过的 3 台机器上都有效。但是,我从研究中注意到 Chrome 有时会安装在 AppData 或其他位置,而不是 Program Files 中。

我的问题是,有没有办法动态确定 Chrome 在 Windows 机器上的安装位置,以便我可以将其附加到快捷方式.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 = ""
    }
}

相关内容