Выбор программ по умолчанию в Windows 10 (часть 2)

Продолжаем разговор о программах по умолчанию в Windows 10. Сегодня мы рассмотрим параметры реестра, отвечающие за настройки ассоциаций файлов.

Первое место, куда мы заглянем, это раздел HKEY_CLASSES_ROOT, именно в нем можно посмотреть тип файла и ассоциированные с ним программы.

Примечание. Раздел HKEY_CLASSES_ROOT (HKCR) состоит из содержимого разделов HKLM\SOFTWARE\Classes и HKCU\Software\Classes. Соответственно изменения можно вносить не в HKCR, а один из этих двух разделов. В HKLM\SOFTWARE\Classes содержатся настройки для всех пользователей компьютера, в HKCU\Software\Classes — настройки для текущего пользователя.

Каждый зарегистрированный в системе файл хранит свои настройки в двух подразделах, которые называются подраздел расширения и подраздел идентификатора файла. Для примера возьмем обычный текстовый файл. Его подраздел расширения имеет название .txt и соответствует расширению файла с точкой перед ним. А в параметре по умолчанию содержится идентификатор данного типа файла — txtfile.

Далее в HKCR находим раздел txtfile, соответствующий найденному идентификатору и переходим в подраздел HKCR\txtfile\shell\open\command. Здесь в параметре по умолчанию хранится команда, которая используется системой для открытия всех файлов данного типа. Для текстового файла она имеет вид %SystemRoot%\System32\Notepad.exe %1, где %SystemRoot%\System32\Notepad.exe — это путь к программе Notepad, а вместо %1 подставляется имя файла.

Для управления этими настройками есть специальные утилиты командной строки assoc и ftype. С помощью утилиты assoc можно посмотреть тип файла (идентификатор):

assoc .txt А затем ftype покажет для него программу по умолчанию: ftype txtfile

С помощью ftype можно не только посмотреть, но и поменять программу по умолчанию. Для примера укажем в качестве программы для открытия txt-файлов редактор Notepad++ такой командой:

ftype txtfile=″C:\Program Files (x86)\Notepad++.exe″ ″%1″

Описанные выше параметры содержат настройки системы по умолчанию и применяются до тех пор, пока пользователь не переопределит их. Текущие же настройки пользователя хранятся в разделе HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts.

В разделе OpenWithList можно посмотреть список программ, которыми открывали данный тип файлов. Так в нашем случае для открытия текстовых файлов использовались Notepad, Wordpad и Notepad++. В параметре MRUList содержится очередность, в которой эти программы использовались — сначала Wordpad (b), затем Notepad (a) и последним Notepad++ (c).

А когда вы открываете в проводнике свойства текстового файла и изменяете программу по умолчанию, то эти настройки сохраняются в разделе HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt\UserChoice. В параметре ProgID хранится идентификатор, а в параметре Hash — хэш программы. Хэш вычисляется каждый раз, когда вы выбираете программу по умолчанию. Его наличие говорит о том, что настройка была произведена пользователем, с помощью специально предназначенной для этого оснастки. Этот механизм предназначен для защиты от вредоносного ПО, которое может подменить файловые ассоциации без ведома пользователя.

Изменить или удалить параметры в UserChoice нельзя, но можно удалить весь раздел целиком. Это приведет к сбросу текущих настроек и возвращению настроек операционной системы по умолчанию. Для примера сбросим настройки для графических файлов типа png.

А теперь внимание. Если проверить ассоциации для png файлов с помощью assoc и ftype, то можно заметить, что файлы данного типа по умолчанию ассоциированы с программой Просмотр фотографий Windows (Windows Photo Viewer), а настройки сбросились до приложения Фотографии (Photos).

А параметр ProgID вместо нормального названия принял какое-то невразумительное значение, состоящее из хаотичного набора букв и цифр.

Дело в том, что в Windows 10 кроме классических программ есть современные приложения (modern-apps). И если заглянуть в раздел HKCU\SOFTWARE\Classes, то можно выяснить, что это самое значение AppX43hnxtbyyps62jhe9sqpdzxn1790zetc как раз соответствует приложению Фотографии.

Чтобы выяснить, для каких еще файлов приложение Фотографии является программой по умолчанию, надо перейти в HKCU\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\Repository\Packages и открыть раздел, соответствующий данному приложению. Найти нужный раздел просто — его имя состоит из названия приложения и его текущей версии, например Microsoft.Windows.Photos_17.425.10010.0_x64__8wekyb3d8bbwe. Все типы файлов, которые могут быть ассоциированы с данным приложением, перечислены в подразделе App\Capabilities\FileAssociations.

Это тот же самый список, который можно увидеть в оснастке панели управления при выборе сопоставлений для программы.

Этот список нельзя отредактировать. Можно изменить ассоциации для отдельно взятого типа файлов, но при сбросе настроек для наиболее популярных форматов графических файлов по умолчанию будет назначено приложение Photos. Это же касается и других modern-приложений, например браузером по умолчанию становится Edge, аудиоплеером — Groove и т.д.

Такое поведение системы не очень удобно, особенно с учетом того, что файловые ассоциации в Windows 10 могут сбрасываться самопроизвольно, например при установке обновлений. Но не все так плохо, и хотя нежелательное приложение нельзя убрать из списка, можно запретить его использование для открытия файлов определенного типа. Для этого необходимо в разделе HKCU\SOFTWARE\Classes найти раздел, соответствующий идентификатору приложения для нужного типа файлов. Значение идентификатора можно найти в описанном выше разделе FileAssociations, либо в разделе UserChoice, в параметре ProgID (предварительно сбросив настройки на дефолтные). Например для файлов png это то самое значение AppX43hnxtbyyps62jhe9sqpdzxn1790zetc.

Для того, чтобы приложение не предлагалось по умолчанию при сбросе настроек, в этом разделе надо создать строковый параметр NoStaticDefaultVerb с пустым значением. А если добавить параметр NoOpenWith, то приложение не будет предлагаться для выбора по умолчанию при настройке вручную и пропадет из списка «Открыть с помощью» в контекстном меню проводника. А при сбросе настроек выбор программы по умолчанию будут производиться согласно настройкам в HKEY_CLASSES_ROOT.

Как видите, настраивать программы по умолчанию с помощью реестра в Windows 10 крайне затруднительно. Поэтому при необходимости централизованной настройки лучше использовать другие инструменты, о которых я расскажу в следующей статье. А на сегодня все.