Заметки о Windows и других программных продуктах Microsoft...

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

Выбор программ по умолчанию в 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

просмотр типа файла с помощью утилиты assoc

 

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

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

изменение программы по умолчанию с помощью утилиты ftype

 

Описанные выше параметры содержат настройки системы по умолчанию и применяются до тех пор, пока пользователь не переопределит их. Текущие же настройки пользователя хранятся в разделе 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).

ассоциация для файлов png

 

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

настройки по умолчанию

 

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

приложение по умолчанию для открытия файлов png

 

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

ассоциации файлов для modern-приложений

 

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

Задание сопоставлений для программы

 

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

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

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

запрет на открытие файла данным приложением

 

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

 
 
Комментарии
Евгений

Спасибо огромное за статью! Очень помогло. Ломал голову с этими типами файлов неделю..

Арслан

Огромнейшее спасибо за статью!

Константин

благодарю so much!

Ответить