Вопрос или проблема
После установки Adobe PDF reader он открывает файлы с расширением .PDF
. По умолчанию веб-браузер открывает файлы .html
, а блокнот открывает файлы .txt
и т.д.
Где именно в реестре хранятся эти ассоциации типа файла и программы?
Иными словами, как Windows знает, с каким программным обеспечением нужно открывать определенный файл (тип)?
Ассоциации открыть с помощью хранятся в HKEY_CLASSES_ROOT
.
Это особая ветвь реестра, которая объединяет ассоциации локального пользователя в HKEY_CURRENT_USER\Software\Classes
с системными ассоциациями в HKEY_LOCAL_MACHINE\Software\Classes
.
Вот скриншот из моего реестра для ассоциации PDF, которую вы упоминаете в своем вопросе:
Чтобы дополнить ответ Гарета:
Исходя из работы с реестром, похоже, что
- записи из
HKEY_CURRENT_USER\Software\Classes
переопределяют записи изHKEY_LOCAL_MACHINE\Software\Classes
вHKEY_CLASSES_ROOT\Software\Classes
- установка ассоциации расширения файла из командной строки с помощью команды
assoc
действует наHKEY_LOCAL_MACHINE\Software\Classes
- установка ассоциации типа файла из командной строки с помощью команды
ftype
действует наHKEY_LOCAL_MACHINE\Software\Classes
В текущих версиях Windows,
#1 Сначала вам нужно проверить HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\[EXT]\UserChoice\ProgId
, если он существует. Если нет, переходите к #5.
#2 ProgId — это класс файла, например, Python.File
(=> переходите к #6) или аналогично идентификатор приложения, например, Applications\SciTE.exe
(=> переходите к #3)
#3 Найдите идентификатор приложения Applications\SciTE.exe
, например, HKEY_CLASSES_ROOT\Applications\SciTE.exe\shell\open\command
. Значение по умолчанию — это команда для запуска.
#4 Готово.
#5 Проверьте Computer\HKEY_CLASSES_ROOT\[EXT]
‘s значение по умолчанию для класса файла, например, Python.File
#6 Проверьте класс файла Python.File
как HKEY_CLASSES_ROOT\Python.File\shell
. Значение по умолчанию — это команда по умолчанию, например, edit
(по умолчанию – open
, если его нет).
#7 Найдите его команду edit
как HKEY_CLASSES_ROOT\Python.File\shell\edit\command
. Значение по умолчанию — это команда для запуска. Примечание: Другие доступные команды для класса файла отображаются в проводнике при щелчке правой кнопкой мыши на файле.
Примечание: HKEY_CLASSES_ROOT
объединяет Software\Classes
из HKEY_CURRENT_USER
(более высокий приоритет) и HKEY_LOCAL_MACHINE
Хотя ответы (вероятно, я не проверял) верны, разумный способ изменить ассоциации файлов — это использовать графический интерфейс, который разработал Microsoft. (То есть, если вы пользователь, а не разработчик настройки.)
Вот один урок с хорошими картинками, я нашел его в Google: http://www.digitalcitizen.life/how-associate-file-type-or-protocol-program
Но вы просто можете открыть меню “Пуск” (меню Win7 или экран Win8, не имеет значения) и ввести ассоциация файлов, ввод, и это должно открыть правильную ссылку на панель управления. (Панель управления\Программы\Программы по умолчанию\Установить ассоциации).
Проблема многих из этих методов в том, что Windows действительно не обрабатывает возможность того, что разные исполняемые файлы имеют одно и то же имя. При использовании графического интерфейса невозможно знать, на какой именно они ссылаются.
Это происходит потому, что в Windows 7 (по крайней мере, я не проверял Windows 10) программа по умолчанию для проводника хранится в HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\
Но если вы посмотрите там, вы найдете, например, в ключе OpenWithList что-то вроде LibreOfficeWriterPortable.exe
в моем случае.
Но у меня есть несколько версий этой программы, все с одинаковым именем, так что изменение этого ключа не поможет.
Чтобы выяснить, на что это на самом деле указывает, вам нужно перейти в (в моем случае)
HKEY_USERS\S-1-5-21-966747605-1980359026-2421819745-1000\Software\Classes\Applications\LibreOfficeWriterPortable.exe\shell\open\command
чтобы выяснить, что на самом деле будет открыто, т.е. на что на самом деле указывает имя, которое они используют.
В Windows 10 вы можете определить, какие расширения файлов поддерживает программа, двумя способами.
1. “Установить стандартные значения по приложению”
Перейдите в Настройки
-> Приложения по умолчанию
-> Установить стандартные значения по приложению
. На следующей странице нажмите управление
на приложении, которое вас интересует. В этой ситуации вы можете определить ассоциации файлов, которые поддерживает приложение.
2. Найдите в реестре
Перейдите в Редактор реестра. И найдите запись Computer\HKEY_LOCAL_MACHINE\SOFTWARE\RegisteredApplications
. Эта запись реестра показывает, где каждая программа регистрирует свои ассоциации файлов. Вы можете найти значение записи по имени приложения, которое вам нужно.
В моем случае я нашел “IrfanView.exe”, и его значение computer\HKEY_LOCAL_MACHINE\SOFTWARE\IrfanView\Capabilities\FileAssociations
. Если перейти к его местоположению, вы можете найти результат, как ниже.
Windows XP также использует значение “application” в FileExts\[EXT]. Оно похоже по действию на значение progid в ключе “UserChoice” в Win7+. В настоящее время мне не удалось найти дополнительную информацию.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ext
“application”=notepad.exe
В моем случае я пытался открыть случайное расширение с помощью WordPad, поэтому я сделал следующее:
- Пуск -> Выполнить -> cmd.exe
- assoc .bhf=txtfile
- Затем найдите файл с этим расширением в проводнике Windows
- Щелкните правой кнопкой мыши -> Открыть с помощью -> Выбрать другое приложение -> Установить флажок “Всегда использовать это приложение для открытия .BHF файлов”
- Выберите программу по своему выбору (если она не видна, выберите “Больше приложений”/”Найти другое приложение на этом ПК”)
В моем случае у меня не было UI-опций для выбора программы по умолчанию или флажка, пока я не выполнил команду на этапе #2. Я думаю, что как только Windows рассматривает файл как “текстовый”, предположительно, он больше не считается “слишком опасным”, чтобы позволить вам ассоциировать его по своему усмотрению…
Ответ или решение
Вопрос о том, где в реестре Windows хранятся ассоциации между типами файлов и программами, с которыми они открываются, является важным аспектом управления файлами в операционной системе. Давайте детально рассмотрим, как Windows определяет, какое программное обеспечение открыть для определённого типа файла.
Основные участки реестра
Чтобы понять, как Windows обрабатывает ассоциации типов файлов, необходимо обратить внимание на следующие участки реестра:
-
HKEY_CLASSES_ROOT
: Это основной раздел реестра, который объединяет ассоциации файлов для текущего пользователя и для всех пользователей системы. Он комбинирует данные изHKEY_CURRENT_USER\Software\Classes
иHKEY_LOCAL_MACHINE\Software\Classes
. Приоритет имеетHKEY_CURRENT_USER
, следовательно, если там есть запись, она будет использоваться вместо записи вHKEY_LOCAL_MACHINE
. -
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\[EXT]\UserChoice\ProgId
: Этот ключ часто содержит идентификатор программы (ProgId) для текущего пользователя и указывает, какая программа должна использоваться по умолчанию для определённого типа файла. Например, при открытии файлов с расширением.pdf
, вашей программой может быть Adobe PDF Reader, что будет отражено в этом ключе. -
HKEY_CLASSES_ROOT\[EXT]
: Здесь хранится информация о классе файла, связанного с определённым расширением. Например, если у вас есть файл с расширением.txt
, вы можете найти информацию о соответствующем классе файла (например,txtfile
). -
HKEY_CLASSES_ROOT\Applications\[Имя_Программы]\shell\open\command
: Этот ключ содержит команду, которая будет выполнена при попытке открыть файл с данным расширением. Значение по умолчанию в этом разделе указывает, как точно будет запущена программа.
Принципы работы
При открытии файла с конкретным расширением Windows выполняет следующий алгоритм:
- Шаг 1: Сначала система проверяет наличие записи в
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\[EXT]\UserChoice\ProgId
. Если запись найдена, используется указанный в ней ProgId. - Шаг 2: Если UserChoice отсутствует, система обращается к
HKEY_CLASSES_ROOT\[EXT]
, чтобы получить имя класса файла. - Шаг 3: Далее происходит поиск в
HKEY_CLASSES_ROOT\[Класс_Файла]\shell\open\command
, чтобы найти команду для запуска программы.
Использование графического интерфейса
Хотя изменения в реестре могут дать дополнительные возможности настройки, рекомендуется использовать графический интерфейс Windows для изменения ассоциаций файлов. Это можно сделать через:
- Параметры:
Настройки -> Приложения -> Приложения по умолчанию -> Установить параметры по программе
. Здесь пользователи могут выбрать приложения для открытия различных типов файлов. - Панель управления:
Панель управления -> Программы -> Программы по умолчанию -> Установить ассоциации
.
Резюме
Windows использует сложную структуру реестра для определения ассоциаций файлов и программ, которые их открывают. Основные ключи в реестре, такие как HKEY_CLASSES_ROOT
и HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts
, играют ключевую роль в этом процессе. Рекомендуется производить изменения через графический интерфейс, чтобы избежать возможных ошибок, связанных с ручным редактированием реестра.
Понимание этих структур и правил поможет вам лучше управлять установками программ и их взаимодействием с различными типами файлов в Windows.