按之前經(jīng)驗(yàn),一個(gè)指定后綴文件(比如.pdf)的右鍵菜單中選擇Open時(shí)的打開方式也就有以下幾種方式:
如果HKEY_CLASSES_ROOT\.pdf中默認(rèn)的key下沒有值(相當(dāng)于別名),則使用 HKEY_CLASSES_ROOT\.pdf\shell\open\command
如果HKEY_CLASSES_ROOT\.pdf中默認(rèn)的key有值,例: FakeExamplePdf,則去查找HKEY_CLASSES_ROOT\FakeExamplePdf下的定義的shell\open\command中的內(nèi)容。
還有一種基于CLSID指定的打開方式。
以上取出最終的命令行格式后,使用當(dāng)前文件的路徑替換命令行中的 %1 并執(zhí)行,以啟用程序?qū)崿F(xiàn)打開功能。
但近期在win10中發(fā)現(xiàn)例外了,把注冊(cè)表中的.pdf刪除也不影響雙擊自動(dòng)執(zhí)行。并且我的Dos命令 assoc 里也沒顯示pdf。
PS: HKEY_CLASSES_ROOT 等同于 HKEY_LOCAL_MACHINE\SOFTWARE\Classes,所以后文會(huì)有部分混用。
控制面板
先看看控制面板中是怎么設(shè)置默認(rèn)應(yīng)用的,可以看到這里的設(shè)置基本上分為以下幾種:
1、選擇可以當(dāng)作默認(rèn)應(yīng)用的軟件,點(diǎn)擊進(jìn)去看看該軟件支持哪些后綴或鏈接協(xié)議格式,然后單獨(dú)設(shè)置。(默認(rèn)瀏覽器作為一項(xiàng)特殊的設(shè)置在某些應(yīng)用里單獨(dú)列出來)

2、選擇后綴或協(xié)議,然后以列表方式選擇支持該后綴或協(xié)議的軟件。

應(yīng)用列表的數(shù)據(jù)來源
- HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications 中記錄著當(dāng)前計(jì)算機(jī)上有哪些注冊(cè)了可以被設(shè)置為默認(rèn)程序的應(yīng)用程序。值是是對(duì)應(yīng)注冊(cè)表路徑,以Capbilities結(jié)尾。在該注冊(cè)表下有描述該程序所綁定的后綴、協(xié)議、打開方式等。
- 有一些Microsoft Store里下載的UWP應(yīng)用,但這個(gè)定義暫時(shí)不知道是在哪里定義的,這要看下UWP開發(fā)的一些資料了(后續(xù)再研究)
Capbilities 結(jié)構(gòu)
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\Microsoft Edge]
@="Microsoft Edge"
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\Microsoft Edge\Capabilities]
"ApplicationDescription"="Microsoft Edge 是以閃電速度運(yùn)行網(wǎng)頁(yè)和應(yīng)用程序的 Web 瀏覽器。它快速、穩(wěn)定而且易于使用。通過 Microsoft Edge 中內(nèi)置的惡意軟件和網(wǎng)絡(luò)釣魚防護(hù)可以更安全地瀏覽網(wǎng)站。"
"ApplicationIcon"="C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe,0"
"ApplicationName"="Microsoft Edge"
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\Microsoft Edge\Capabilities\FileAssociations]
".htm"="MSEdgeHTM"
".html"="MSEdgeHTM"
".shtml"="MSEdgeHTM"
".svg"="MSEdgeHTM"
".xht"="MSEdgeHTM"
".xhtml"="MSEdgeHTM"
".webp"="MSEdgeHTM"
".pdf"="MSEdgePDF"
".mht"="MSEdgeMHT"
".mhtml"="MSEdgeMHT"
".xml"="MSEdgeHTM"
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\Microsoft Edge\Capabilities\Startmenu]
"StartMenuInternet"="Microsoft Edge"
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\Microsoft Edge\Capabilities\URLAssociations]
"ftp"="MSEdgeHTM"
"http"="MSEdgeHTM"
"https"="MSEdgeHTM"
"irc"="MSEdgeHTM"
"mailto"="MSEdgeHTM"
"mms"="MSEdgeHTM"
"news"="MSEdgeHTM"
"nntp"="MSEdgeHTM"
"read"="MSEdgeHTM"
"sms"="MSEdgeHTM"
"smsto"="MSEdgeHTM"
"snews"="MSEdgeHTM"
"tel"="MSEdgeHTM"
"urn"="MSEdgeHTM"
"webcal"="MSEdgeHTM"
"microsoft-edge"="MSEdgeHTM"
"microsoft-edge-holographic"="MSEdgeHTM"
"ms-xbl-3d8b930f"="MSEdgeHTM"
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\Microsoft Edge\DefaultIcon]
@="C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe,0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\Microsoft Edge\InstallInfo]
"ReinstallCommand"="\"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe\" --make-default-browser"
"HideIconsCommand"="\"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe\" --hide-icons"
"ShowIconsCommand"="\"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe\" --show-icons"
"IconsVisible"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\Microsoft Edge\shell]
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\Microsoft Edge\shell\open]
[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\Microsoft Edge\shell\open\command]
@="\"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe\""
可以看到Capabilities\URLAssociationst和Capabilities\FileAssociations 中的列表,和控制面板中點(diǎn)擊該應(yīng)用時(shí)的“默認(rèn)文件類型或鏈接類型”顯示一致,FileAssociations中給.pdf定義了MSEdgePDF的值,而該值對(duì)應(yīng)HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSEdgePDF
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSEdgePDF]
@="Microsoft Edge PDF Document"
"AppUserModelId"="MSEdge"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSEdgePDF\Application]
"AppUserModelId"="MSEdge"
"ApplicationIcon"="C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe,0"
"ApplicationName"="Microsoft Edge"
"ApplicationDescription"="瀏覽 Web"
"ApplicationCompany"="Microsoft Corporation"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSEdgePDF\DefaultIcon]
@="C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe,13"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSEdgePDF\shell]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSEdgePDF\shell\open]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSEdgePDF\shell\open\command]
@="\"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe\" --single-argument %1"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSEdgePDF\shell\runas]
"ProgrammaticAccessOnly"=""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSEdgePDF\shell\runas\command]
@="\"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe\" --do-not-de-elevate --single-argument %1"
吶,這里就有熟悉的 shell\open\command了。但現(xiàn)在就只有一個(gè)疑問,控制面板設(shè)置的打開方式,能否使用注冊(cè)表查詢的到?
查看HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf這里的 UserChoice 記錄了用戶在控制面板中的對(duì)文件后綴的選擇
其下有兩個(gè)子鍵:
Hash和ProgId,ProgId在本例中就是MSEdgePDF。Hash是一個(gè)驗(yàn)證字段,避免惡意程序修改。
而HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations中記錄了對(duì)鏈接類型的默認(rèn)程序選擇。
其它知識(shí):
使用Dism.exe /online /Export-DefaultAppAssociations:FileAssos.xml命令可以打印出當(dāng)前系統(tǒng)上所有文件綁定的默認(rèn)打開方式。
比如:<Association Identifier=".pdf" ProgId="MSEdgePDF" ApplicationName="Microsoft Edge" />
眾所周知,Windows 10會(huì)在每次更新后通過更改文件類型關(guān)聯(lián)來重置默認(rèn)應(yīng)用程序。要解決此問題,您可以做的最好的事情是備份文件類型關(guān)聯(lián),并在發(fā)現(xiàn)Windows 10更新弄亂它們后將其還原。