Я изменил ассоциацию для использования при запуске .py
файла через проводник Windows:
- Сервис -> Папки -> Типы файлов.
- Затем перейдите к
.py
. - Измените ассоциацию на Wordpad.
Теперь, когда я набираю имя py-файла в командной строке, Wordpad открывает его.
Но assoc
и ftype
в командной строке все равно возвращаем следующее:
C:\> assoc .py
.py = Python.File
C:\> ftype Python.File
Python.File = "C:\Program\Python27\python.exe" "%1" %*
Как получается, что ассоциация работает, но так assoc
и ftype
не осознает этого?
Я перезапустил подсказку.
Больше информации из моего реестра:
HKEY_CLASSES_ROOT\.py
= Python.File
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
= wordpad.exe
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\OpenWithProgids\Python.File
=
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.py\(Standard)
= Python.File
Больше реестра:
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command\(Standard)
= "C:\Program\Python27\python.exe" "%1" %*`
Я полагаю, это то, что проявляется в ftype Python.File
. Но, похоже, не привыкать.
(Я делаю это для тестирования, так что в итоге я могу легко выбрать версию Python по умолчанию).
Ответы:
В зависимости от того, как вы называете файл, будет зависеть, какой глагол используется. Глагол, который вы используете, определяет, что Windows будет делать с ним. Стандартные глаголы: «Открыть», «Редактировать», «Распечатать», «Воспроизвести» и «Предварительный просмотр». Тем не менее, можно создавать свои собственные глаголы . Наиболее часто добавляемый глагол - это семейство Open With (включая OpenWithProgIDs), которое добавляет небольшое контекстное подменю в «Open With», чтобы дать вам возможные альтернативы. Например, если вы установите Paint.NET, а затем щелкните правой кнопкой мыши файл .jpg, вы увидите, что запись «Открыть с помощью» развернется в подменю, в котором перечислены Paint.NET, Paint и все, что Microsoft назвала средством просмотра изображений для вашей версии. Windows.
Кроме того, очень важно то, что сказано в Unsigned Code Labs. Когда вы отлаживаете классы, вам нужно посмотреть на
HKLM\Software\Classes\
иHKCU\Software\Classes
.HKCR
очень полезно для запросов к системе, но не так хорошо, чтобы выяснить, почему он плохо себя ведет.Я провел небольшое тестирование в своей системе Windows 7 с помощью
procmon.exe
,assoc
и,ftype
кажется, команды и пытаются писать напрямуюHKCR
, а система, очевидно, интерпретирует это как записьHKLM
. Моя текущая учетная запись является членом группы администраторов, но UAC включен. Я получил отказано в доступе, когда я пыталсяassoc .mytest=MyTest.File
.Как ни странно, если я создаю ассоциацию, щелкнув правой кнопкой мыши на файле с именем
test.mytest
и связав его с Блокнотом, ни тот,assoc
ни другой неftype
увидят эту ассоциацию. Ассоциация определенно есть вHKCU
иHKCR
. Я не пытался перезагрузиться, однако.источник
я не знаю, как вы можете сделать соответствие между реестром и тем, что появляется в ftype и assoc. Для меня и, как я вижу, команды ftype и assoc бесполезны. Что я делаю, чтобы изменить программу по умолчанию для данного расширения программным способом (по сравнению со стандартным и более простым способом с помощью проводника), изменив этот раздел реестра
Например, если я хочу открыть свои mp3-файлы с помощью mplayer, я вставляю
значение "mplayerc.mp3"
Каковы сложности этого: во-первых, вам нужно знать действительные ProgID (используйте ftype), а во-вторых, вам нужен доступ для записи в этот улей. Windows автоматически добавляет запрещающий ACL для ключа UserChoice, поэтому вам нужно найти способ удалить это запрещающее правило, чтобы получить доступ на запись. Я использую программу subinacl, которую вы можете загрузить здесь http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en, чтобы изменить разрешения. Также вы можете использовать стороннюю программу SetACL. Я рекомендую первое, потому что синтаксис намного проще.
источник
Проводник (оболочка Windows) всегда отдает предпочтение приложению, указанному в ключе поставщика, который указан в значении расширения по умолчанию. (В вашем случае
.py
это расширение,Python.File
это ключ поставщика.)ftype
иassoc
может прочитать их значения из других областей, я не знаю точно. Вот как это делает Explorer.РЕДАКТИРОВАТЬ: Эта страница может быть интересна для вас: MSDN - Типы файлов
Особенно это:
Возможно, именно здесь различные части Windows сталкиваются, если в HKEY_LOCAL_MACHINE существует ассоциация «по умолчанию», которая переопределяется той, которую вы определили для своей учетной записи (которая затем будет сохранена в HKEY_CURRENT_USER).
источник
Microsoft изменила, как это работает, начиная с Windows 8. Больше невозможно редактировать реестр, чтобы изменить это. Чтобы процитировать Microsoft :
Microsoft ожидает, что вы измените это сейчас, с помощью XML-файла, который реализован с помощью групповой политики. Инструкции здесь .
К счастью, Кристоф Колбич пересмотрел алгоритм хеширования и создал инструмент SetUserFTA для установки ассоциации типов файлов. К сожалению, это закрытый источник.
источник
Здесь возникает путаница между тем, что используется для открытия файла, и тем, что используется для запуска файла. Ключ реестра
это то, что говорит Windows, как открыть файл. Двойной щелчок по файлу откроет файл с этим приложением.
Поскольку файл не является исполняемым файлом, в командной строке предполагается, что вы хотите открыть файл в приложении по умолчанию, как если бы вы дважды щелкнули по нему.
Если изменить ассоциацию обратно на C: \ Program \ Python27 \ python.exe или отредактировать раздел реестра, чтобы он указывал на python, он должен вернуться к тому, что был раньше, где Windows предполагает, что вы хотите открыть файл с программой по умолчанию, которая python.exe, который затем запускает программу.
источник
.py\Application
используется для открытия файлов py. Я не понимаю, в каких случаях используется значение inPython.File
.PATHEXT
Переменную). Однако я вспоминаю, как читал в прошлом, что сотрудники, созданные в Проводнике, всегда перезаписывают данные изClasses
раздела реестра.Ваш самый большой ключ к назначению и местоположению находится в «большом типе», то есть названиях соответствующих ульев: HKLM и HKCU
Файловые ассоциации установлены в обоих кустах и имеют две разные цели:
Как следует из названия, записи реестра HKCU устанавливают ассоциации файлов для CURRENT USER и переопределяют соответствующие настройки типа файла в HKLM.
HKLM устанавливает ассоциации файлов для ЛОКАЛЬНОЙ МАШИНЫ, т. Е. Для ВСЕХ ПОЛЬЗОВАТЕЛЕЙ машины (если не переопределено записями HKCU). (Для Win98 HKCR был просто сокращенным псевдонимом для HKLM \ Software \ Classes. Они не были отдельными или разными ульями. Однако это изменилось для Win XP и больше не соответствует действительности. HKCR теперь является виртуальным кустом, который является результатом слияния ключи HKLM \ Software \ Classes \, HKCU \ Software \ Classes \ и HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts с информацией HKCU, имеющей приоритет.)
Эта двухэтапная система упрощает схемы сопоставления файлов не только один-к-одному, но и многие-к-одному и один-ко-многим. Например, для типов файлов .htm, .html и .shtml может быть задано значение ProgID = htmlfile, которое, в свою очередь, может определять один браузер. OTOH, записи могут содержать подразделы OpenWithList или OpenWithProgID с несколькими записями, чтобы открыть файл из списка нескольких браузеров, редакторов или других приложений.
И HKLM \ Software \ Classes \, и HKCU \ Software \ Classes работают одинаково (один имеет приоритет над другим). В простейшей форме есть раздел реестра для расширения файла (например, HKCR.txt), значением по умолчанию которого является соответствующий ProgID (например, txtfile). Помимо значения по умолчанию или вместо него, для подраздела «OpenWithProgID» могут быть указаны дополнительные имена ProgID (например, txtfile и htmlfile) и / или дополнительные имена приложений, отображаемые в качестве подразделов в «OpenWithList» (например, Notepad ++). .exe, Opera.exe, Firefox.exe).
Каждый ProgID определен в другом ключе в HKCR (например, HKCR \ txtfile). Этот ключ содержит подключи, чтобы указать окнам, какой значок использовать и как открыть, распечатать, распечатать и т. Д. Связанный файл (например, g, HKCR \ txtfile \ shell \ open \ command). Аналогичным образом, каждое имя приложения определяется как подраздел в разделе HKCR \ Applications (например, HKEY_CLASSES_ROOT \ Applications \ Firefox.exe \ shell \ open \ command).
В дополнение к ключу HKCU \ Software \ Classes сопоставления файлов учетных записей пользователей находятся в ключе HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts. Эти записи предназначены не только для Windows Explorer, как было предложено, но являются дополнительным источником переопределений ассоциации файлов учетных записей пользователей. Записи создаются инструментами сопоставления файлов в проводнике (Explorer \ Tools \ Folder Options \ File Types) и содержат OpenWithList и / или подраздел OpenwithProgID для каждого указанного расширения файла.
Чтобы определить сопоставление файлов, Windows сначала просматривает записи HKCU для соответствующего расширения файла. Только если он не найден, записи HKLM вступают в игру. (Примечание: я не проверял, который имеет приоритет - HKCU \ Software \ Classes или HKCU \ MIcrosoft \ Windows \ CurrentVersion \ Explorer \ FileExts, но я подозреваю, что это будет ключ FileExts). Аналогичным образом, если в HKCU не найден ссылочный ProgID или имя приложения, выполняется поиск записей HKLM. (Обратите внимание, что \ Applications \ entry - это просто произвольное имя - даже если они, как правило, идентичны действительному имени файла на диске exe.)
Поэтому, чтобы определить сопоставление файлов для конкретной учетной записи пользователя, создайте записи в кусте HKCU. Чтобы определить связь для всех пользователей, создайте записи в кусте HKLM (HKCR) и удалите все ссылки в кусте HKCU для этого типа файлов. Очевидно, вам нужны соответствующие права доступа к ключам реестра.
Я не использую инструменты assoc и ftype, так как предпочитаю использовать RegEdit в интерактивном или пакетном режиме, но из других комментариев видно, что они работают только с кустом HKLM и бесполезны для очистки / установки ключей HKCU. Потратьте некоторое время и просмотрите вышеупомянутые ключи с помощью RegEdit, чтобы увидеть больше примеров.
источник