我希望能够通过类似浏览器的“设置为默认浏览器”选项的C#程序来更改默认浏览器(和其他关联)。
我尝试过更改HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice,但是Windows会检测到篡改,即使我将Hash和ProgId都恢复到先前的值。似乎Hash是唯一的、基于时间的。
我希望能够通过类似浏览器的“设置为默认浏览器”选项的C#程序来更改默认浏览器(和其他关联)。
我尝试过更改HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice,但是Windows会检测到篡改,即使我将Hash和ProgId都恢复到先前的值。似乎Hash是唯一的、基于时间的。
#' IE_ratherThan_Edge_MakeDefaultForNewUserProfiles_inWin10.ps1
#' From: https://community.spiceworks.com/topic/1812853-export-xml-with-dism-then-import-with-powershell
#'========================================================
#' This is good for Win10 Build 1709 and 1803
#'Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
$file_OriginalWithEdge = "C:\Windows\System32\OEMDefaultAssociations.xml"
$file_CopyToKeepInCase = "C:\Windows\System32\OEMDefaultAssociations_ORIG_Edge_BEFORE_replacingWithIE.xml"
$file_Modified_BrowserIE = "C:\Windows\System32\OEMDefaultAssociations_Modified_with_IEratherThanEdge.xml"
#' 1] Copy and rename the file
Copy-Item $file_OriginalWithEdge -Destination $file_CopyToKeepInCase
$stringForEdge_1 = '<Association Identifier=".htm" ProgId="AppX4hxtad77fbk3jkkeerkrm0ze94wjf3s9" ApplicationName="Microsoft Edge" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppX6k1pws1pa7jjhchyzw9jce3e6hg6vn8d" />'
$stringForIE_1 = '<Association Identifier=".htm" ProgId="htmlfile" ApplicationName="Internet Explorer" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppX4hxtad77fbk3jkkeerkrm0ze94wjf3s9" />'
$stringForEdge_2 = '<Association Identifier=".html" ProgId="AppX4hxtad77fbk3jkkeerkrm0ze94wjf3s9" ApplicationName="Microsoft Edge" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppX6k1pws1pa7jjhchyzw9jce3e6hg6vn8d" />'
$stringForIE_2 = '<Association Identifier=".html" ProgId="htmlfile" ApplicationName="Internet Explorer" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppX4hxtad77fbk3jkkeerkrm0ze94wjf3s9" />'
$stringForEdge_3 = '<Association Identifier="http" ProgId="AppXq0fevzme2pys62n3e0fbqa7peapykr8v" ApplicationName="Microsoft Edge" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppXehk712w0hx4w5b8k25kg808a9h84jamg" />'
$stringForIE_3 = '<Association Identifier="http" ProgId="IE.HTTP" ApplicationName="Internet Explorer" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppXq0fevzme2pys62n3e0fbqa7peapykr8v" />'
$stringForEdge_4 = '<Association Identifier="https" ProgId="AppX90nv6nhay5n6a98fnetv7tpk64pp35es" ApplicationName="Microsoft Edge" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppXz8ws88f5y0y5nyrw1b3pj7xtm779tj2t" />'
$stringForIE_4 = '<Association Identifier="https" ProgId="IE.HTTPS" ApplicationName="Internet Explorer" ApplyOnUpgrade="true" OverwriteIfProgIdIs="AppX90nv6nhay5n6a98fnetv7tpk64pp35es" />'
#' 2] Replace the string
$content = [System.IO.File]::ReadAllText($file_OriginalWithEdge).Replace($stringForEdge_1,$stringForIE_1).Replace($stringForEdge_2,$stringForIE_2).Replace($stringForEdge_3,$stringForIE_3).Replace($stringForEdge_4,$stringForIE_4)
[System.IO.File]::WriteAllText($file_Modified_BrowserIE, $content)
#' 3] Delete the original File
Remove-Item -LiteralPath $file_OriginalWithEdge
#' 4] Copy the modified file to the name of the original file
Copy-Item $file_Modified_BrowserIE -Destination $file_OriginalWithEdge
Hash
值的哈希算法来编程更改默认的网络浏览器的能力,并与相关注册表键中的值相匹配。SetDefaultBrowser.exe
已经找到了这个算法,因此允许完全自动化地更改用户的默认网络浏览器。
有关背景信息和下载链接,请参阅此博文。
或者,如果您已经安装了Chocolatey,您可以按照以下步骤安装SetDefaultBrowser.exe
:
choco install setdefaultbrowser -y