|
在win7及更早的版本下,我们可以很容易地通过修改注册表来达到修改默认浏览器的目的。然而在win8以上版本,尤其是在win10中,想要修改这些项目就必须依靠systemsetting即系统中的设置来实现,主要原因是在设置过程中还附加设置了一项hash值,使得不匹配的浏览器无法启动。当然,使用自带的设置来完成这些操作是最为快捷的办法,然而要实现自动部署,比如在PE下实现相应的操作就得另辟蹊径。
下面以Chrome为例,给出解决此问题的一些思路:
一、方法一
适用于win8,win8.1(可能包含一些win10早期版本),不仅可以修改默认浏览器,还能指定一些特定后缀文件的默认打开方式。
调用shell32.dll中的SetAppAsDefault函数,具体见https://docs.microsoft.com/en-us/windows/desktop/api/shobjidl_core/nf-shobjidl_core-iapplicationassociationregistration-setappasdefault
这里简单介绍下它的用法。函数原型:
- HRESULT SetAppAsDefault(
- LPCWSTR pszAppRegistryName,
- LPCWSTR pszSet,
- ASSOCIATIONTYPE atSetType
- );
复制代码
参数pszAppRegistryName
指定应用程序的注册名称。更具体一点,它是HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications下字符串值得名称,与HKEY_CURRENT_USER\SOFTWARE\Classes\(your application name)\Application 下名为ApplicationName的字符串值对应的值相对应,例如Chrome项目的ApplicationName为Google Chrome
参数pszSet
指定应用程序的扩展名或协议。如:扩展名.html或.pdf 协议http或https
这里再简要介绍下设置默认浏览器中扩展名和协议的区别:
扩展名规定打开特定后缀文件所采取的默认行为(例如直接打开后缀为html的文件):
协议则规定在特定的应用中访问所采取的行为(例如在地址栏中直接访问一个网址):
参数atSetType
指定应用程序类型,具体见https://docs.microsoft.com/zh-cn/windows/desktop/api/shobjidl_core/ne-shobjidl_core-associationtype
这里,给出一个在pecmd里设置Chrome为默认浏览器的简单例子:
- CALL $shell32.dll,SetAppAsDefault,#Google Chrome,#http,#1
复制代码
类似地,你可以将其他后缀的文件类型关联起来。
二、方法二
根据dism来进行相应操作。
第一步:导出系统中的文件关联配置。
Dism.exe /Online /Export-DefaultAppAssociations:C:\AppAssoc.xml
注意,只能使用/Online选项在已经登录的系统中进行导出。
如果在导出过程中存在问题,你也可以用如下的模板文件,将其命名为*.xml.
- <?xml version="1.0" encoding="UTF-8"?>
- <DefaultAssociations>
- <Association Identifier=".htm" ProgId="ChromeHTML" ApplicationName="Google Chrome" />
- <Association Identifier=".html" ProgId="ChromeHTML" ApplicationName="Google Chrome" />
- <Association Identifier=".pdf" ProgId="ChromeHTML" ApplicationName="Google Chrome" />
- <Association Identifier="http" ProgId="ChromeHTML" ApplicationName="Google Chrome" />
- <Association Identifier="https" ProgId="ChromeHTML" ApplicationName="Google Chrome" />
- </DefaultAssociations>
复制代码
结果一目了然,上面列举了一些设置为默认浏览器需要用到的选项,你也可以根据需要自行修改。
这里的ProgId对应HKEY_LOCAL_MACHINE\SOFTWARE\Classes\{ProgID},如Chrome:
第二步:导入修改后的文件关联配置。
Dism.exe /Image:C:\test\offline /Import-DefaultAppAssociations:C:\AppAssoc.xml
完成后,你可以查看文件关联是否正确:
Dism.exe /Image:C:\test\offline /Get-DefaultAppAssociations
在实际的操作过程中,发现似乎不提供ProgID以及相关信息,在dism完成相应的操作后再添加对应的注册表项目也可以正常获得文件关联。有待进一步验证。
三、方法三
使用SetUserFTA和SetDefaultBrowser
具体见http://kolbi.cz/blog/2017/11/10/setdefaultbrowser-set-the-default-browser-per-user-on-windows-10-and-server-2016-build-1607/
http://kolbi.cz/blog/2017/10/25/setuserfta-userchoice-hash-defeated-set-file-type-associations-per-user/
这两个链接。
下面简要介绍下使用方法
1.SetUserFTA
SetUserFTA /get 获取当前的关联信息
SetUserFTA extension progid 设置对应的关联,例如 SetUserFTA .html ChromeHTML
同样地,你可以以这种方式设置协议,例如SetUserFTA http ChromeHTML
然而,这在1607以及更高版本不适用,因此需要用到SetDefaultBrowser 工具.
2.SetDefaultBrowser
使用非常容易。直接运行即可列出当前安装的浏览器:
然后,根据列出的选项直接设置默认浏览器。例如 SetDefaultBrowser HKLM "Google Chrome"
需要注意的是,使用该工具前必须确保浏览器已经在注册表中正确注册。
|
评分
-
查看全部评分
|