最近,有人向我求助,希望我能帮助他们实现一键设置Chrome为默认浏览器。我心想,这有何难?改个注册表不就搞定了嘛。很多软件不都是这么做的吗?找到对应的注册表项,快速、准确地修改,然后…结果却弹出了一个令人头疼的窗口。
手动修改注册表不行,那用命令行去修改下呢?结果同样的悲剧发生:错误:拒绝访问
即使是使用了管理员权限。
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.htm\UserChoice /v Progid /t REG_SZ /d ChromeHTML /f
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.html\UserChoice /v Progid /t REG_SZ /d ChromeHTML /f
reg add HKCU\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice /v Progid /t REG_SZ /d ChromeHTML /f
reg add HKCU\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice /v Progid /t REG_SZ /d ChromeHTML /f
仔细研究发现是因为微软在Windows 10和Windows 11系统中通过更新【Windows 10(KB5034763)和Windows 11(KB5034765)】,引入了一个驱动程序,目的是限制用户通过软件或手动编辑注册表的方式来更改默认的网络浏览器。尽管这一变化给习惯使用自动化脚本或软件更改默认浏览器的用户带来了不便,但用户仍然可以通过Windows的系统设置手动更改默认浏览器。
面对这样的限制,用户有以下两种方法可以尝试:
- 组策略
- 第三方命令行工具
组策略
注意:
如果 Chrome 没有安装在目标计算机上,文件关联将不会应用,用户在打开链接(http 或 https)或文件(html 或 htm)时必须选择一个应用程序。
-
创建一个默认应用程序关联 XML 文件(提供样本)
默认应用程序关联文件是一个 XML 文件,它将文件类型与应用程序关联起来。例如,如果您将 .html 或 .htm 文件与 Chrome 应用程序关联,那么默认情况下,每次用户打开 html 或 htm 文件时都会启动 Chrome。<?xml version="1.0" encoding="UTF-8"?> <DefaultAssociations> <Association ApplicationName="Google Chrome" ProgId="ChromeHTML" Identifier=".html"/> <Association ApplicationName="Google Chrome" ProgId="ChromeHTML" Identifier=".htm"/> <Association ApplicationName="Google Chrome" ProgId="ChromeHTML" Identifier="http"/> <Association ApplicationName="Google Chrome" ProgId="ChromeHTML" Identifier="https"/> <Association ApplicationName="Google Chrome" ProgId="ChromeHTML" Identifier=".pdf"/> </DefaultAssociations>
将以上xml内容保存在
c:\windows\system32\defaultassociations.xml
中, 对于加入域的计算机,必须将此文件放置在所有加入域的计算机都能访问的服务器上的共享文件夹中。 -
配置默认文件类型和协议关联配置文件的组策略,请按照以下步骤操作:
- 打开组策略编辑器,然后转到
计算机配置\管理模板\Windows 组件\文件资源管理器
。 - 选择
设置默认关联配置文件
。 - 点击“策略设置”,然后点击
启用
。 - 在
选项:
下,输入您的默认关联配置文件
的位置(例:c:\windows\system32\defaultassociations.xml)。 - 点击
确定
以保存策略设置。 - 最后运行
GPUpdate.exe /force
命令来强制手动刷新组策略,或者重启电脑来刷新组策略,来验证你的配置是否生效。
- 打开组策略编辑器,然后转到
第三方命令行工具
IT 顾问 Christoph Kolbicz 的程序 SetUserFTA,一个命令行工具,允许 Windows 管理员通过登录脚本和其他方法来更改文件关联。
工具下载地址:https://setuserfta.com/SetUserFTA.zip
下面将通过这个命令行工具,使用powershell去设置默认浏览器为Chrome,大致流程如下:
- 检查并创建下载文件夹。
- 下载 SetUserFTA.zip 文件。
- 解压文件到指定文件夹。
- 启动 SetUserFTA.exe 来设置 Chrome 为多种文件扩展名和 URL 协议的默认浏览器。
# 定义下载链接和目标文件夹
$url = "https://setuserfta.com/SetUserFTA.zip"
$downloadFolderPath = "$env:USERPROFILE\downloads" #可以根据自己情况修改下载文件夹位置
$zipFilePath = Join-Path $downloadFolderPath "SetUserFTA.zip"
# 检查 downloads 文件夹是否存在,如果不存在则创建
if (-Not (Test-Path -Path $downloadFolderPath)) {
New-Item -ItemType Directory -Path $downloadFolderPath
}
# 下载文件
Write-Host "开始从 $url 下载文件..."
try {
Invoke-WebRequest -Uri $url -OutFile $zipFilePath
} catch {
Write-Host "下载失败: $_"
exit
}
# 解压文件
if (Test-Path -Path $zipFilePath) {
Write-Host "开始解压文件..."
Expand-Archive -Path $zipFilePath -DestinationPath $downloadFolderPath
}
# 设置 SetUserFTA 可执行文件路径
$SetUserFTA_path = Join-Path $downloadFolderPath "SetUserFTA\SetUserFTA.exe"
# 检查 SetUserFTA.exe 是否存在
if (Test-Path -Path $SetUserFTA_path) {
# 定义要设置的扩展名和协议
$extensionsAndProtocols = @(".html", ".htm", "http", "https", ".pdf")
# 循环设置默认浏览器
foreach ($item in $extensionsAndProtocols) {
try {
Write-Host "正在设置 $item 的默认浏览器为 Chrome..."
Start-Process -FilePath $SetUserFTA_path -ArgumentList "$item ChromeHTML" -NoNewWindow -Wait
Start-Sleep -s 1
} catch {
Write-Host "设置 $item 时出错: $_"
}
}
} else {
Write-Host "未找到 SetUserFTA.exe"
}
参考
- https://learn.microsoft.com/en-us/deployedge/edge-default-browser
- https://kolbi.cz/blog/
- https://setuserfta.com/