Как получить ftype & assoc в соответствии с проводником Windows?

я изменил ассоциацию для использования при запуске .py файл, через Проводник Windows:

  1. сервис - > папки - > типы файлов.
  2. выберите .py.
  3. измените ассоциацию на Wordpad.

теперь, когда я набираю имя файла py в командной строке, Wordpad открывает его.

но assoc и ftype в командной строке по-прежнему возвращает следующее:

C:> assoc .py
.py = Python.File

C:> ftype Python.File
Python.File = "C:ProgramPython27python.exe" "%1" %*

почему ассоциация работает, но assoc и ftype не осознаете этого?

я перезапустил приглашение.


больше информации из моего реестра:

HKEY_CLASSES_ROOT.py
= Python.File

HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerFileExts.pyApplication
= wordpad.exe

HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerFileExts.pyOpenWithProgidsPython.File
= 

HKEY_LOCAL_MACHINESOFTWAREClasses.py(Standard)
= Python.File

больше реестра:

HKEY_CLASSES_ROOTApplicationspython.exeshellopencommand(Standard)
= "C:ProgramPython27python.exe" "%1" %*`

Я полагаю, что это то, что появляется в ftype Python.File. Но к этому, похоже, не привыкнешь.


(я делаю это для тестирования, поэтому я могу легко выбрать версию Python по умолчанию).

19
задан Tom Wijsman
21.12.2022 5:09 Количество просмотров материала 3205
Распечатать страницу

6 ответов

в зависимости от того, как вы называете файл, будет зависеть от того, какой глагол используется. Команда, которую вы используете, определяет, что Windows будет делать с ней. Стандартные команды: Open, Edit, Print, Play и Preview. Однако это возможно создайте свои собственные глаголы. Наиболее часто добавляемый глагол -открыть с семьей (включая OpenWithProgIDs), которые добавляют это небольшое контекстное подменю под "открыть С", чтобы дать вам возможные альтернативы. Если вы установите Paint.NET для например, а затем щелкните правой кнопкой мыши .jpg-файл, вы увидите, что Open With entry расширяется до подменю, в котором перечислены Paint.NET, Paint и все, что Microsoft назвала средством просмотра изображений для вашей версии Windows.

кроме того, очень важно то, что сказали неподписанные лаборатории кода. При отладке классов необходимо смотреть на HKLM\Software\Classes\ и HKCU\Software\Classes. HKCR очень полезно для запроса системы, но не так хорошо для выяснения, почему он плохо себя ведет.

я немного испытания на моей системе Windows 7 с procmon.exe и assoc и ftype команды появляются, чтобы попытаться написать непосредственно к HKCR, и система, по-видимому, интерпретирует это как запись в HKLM. Моя текущая учетная запись является членом группы администраторов, но контроль учетных записей включен. Мне отказали в доступе, когда я попытался assoc .mytest=MyTest.File.

странно, если я создаю ассоциацию, щелкнув правой кнопкой мыши файл с именем test.mytest и связывание его с Блокнотом, ни assoc nor ftype видит эту ассоциацию. Тот ассоциация, безусловно, есть в HKCU и HKCR. Я не пробовал перезагрузки, однако.

8
отвечен Bacon Bits 2022-12-22 12:57

Я не знаю, как вы можете сделать матч между реестром и то, что появляется в ftype и assoc. Для меня и, как я вижу для вас, а также команды ftype и assoc бесполезны. Что я делаю, чтобы изменить программу по умолчанию для данного расширения в programatic образом (против стандартного и более простым способом с помощью проводника) изменить этот раздел реестра

HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.TheExtensionYouWantToModify\UserChoice\ProgID

например, если я хочу открыть мои mp3 файлы с помощью mplayer, я вставляю

HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3\UserChoice\ProgID 

значение "mplayerc.МР3"

каковы сложности этого: во-первых, вам нужно знать идентификаторы progid(используйте ftype), а во-вторых, вам нужен доступ на запись к этому улью. Windows автоматически помещает запрещающий ACL для ключа UserChoice, поэтому необходимо найти способ удалить это запрещающее правило, чтобы получить доступ на запись. Я использую программу subinacl, которую вы можете скачать здесь http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e8ba3e56-d8fe-4a91-93cf-ed6985e3927b&displaylang=en изменить разрешения. Также вы можете использовать стороннюю программу SetACL. Я рекомендую первый, потому что синтаксис намного проще.

4
отвечен mjsr 2022-12-22 15:14

проводник (оболочка Windows) всегда отдает предпочтение приложению, указанному в ключе поставщика, который указан в значении по умолчанию расширения. (В вашем случае .py такое расширение, Python.File ключ поставщика.)

ftype и assoc может читать значения из других областей, я не знаю. То как раз как исследователь делает его.

EDIT: эта страница может вас заинтересовать:MSDN-файл Типы

особенно вот это:

поддерево HKEY_CLASSES_ROOT-это представление, образованное слияние раздел реестра HKEY_CURRENT_USER\программное обеспечение\классы и HKEY_LOCAL_MACHINE\программное обеспечение\классы.

возможно, это где различные части Windows, столкновение, если есть" по умолчанию " ассоциация в HKEY_LOCAL_MACHINE, который становится переопределен тот, который вы определили на свой счет (который затем будет храниться в Раздел HKEY_CURRENT_USER).

3
отвечен Unsigned 2022-12-22 17:31

путаница здесь между тем, что используется для открыть файл и то, что используется для run файл. Раздел реестра

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.py\Application
\.py\Application

это то, что говорит windows, Как открыть файл. Двойной щелчок по файлу откроет файл с помощью этого приложения.

изменение ассоциации обратно C:\Program\Python27\python.exe или редактирование раздела реестра, чтобы указать на python должен вернуть его, как это было раньше, где windows предполагает, что вы хотите, чтобы открыть файл с программой по умолчанию, который является python.exe, который затем запускает программу.

1
отвечен Majenko 2022-12-22 19:48

ваш самый большой ключ к цели и местоположению находится в "большом типе", т. е. именах соответствующих ульев: HKLM и HKCU

ассоциации файлов устанавливаются в обоих ульях и имеют два различных назначения:

как следует из названия, записи реестра HKCU задают сопоставления файлов для текущего пользователя и переопределяют соответствующие параметры типа файлов в HKLM.

HKLM задает сопоставления файлов для локального компьютера, i.e, для всех потребителей машины (если только переопределено записями HKCU). (Для Win98 HKCR был сокращенным псевдонимом для HKLM\Software\Classes. Они не были отдельными или разными ульями. Однако это изменилось для Win XP и больше не верно. Hkcr является теперь виртуальный улей, который является результатом слияния классов программного обеспечения\\в HKLM\, в HKCU программные классы\\\, и HKCU\программное обеспечение\Microsoft\окна\CurrentVersion равное\проводник\FileExts ключи с реестра HKCU информация имеет приоритет.)

эта двухэтапная система позволяет не только один на один, но схемы сопоставления файлов "многие к одному" и "один ко многим". Например. ,htm,.html и .все типы файлов shtml могут быть установлены в ProgID=htmlfile, который, в свою очередь, может определить один браузер. OTOH, записи могут содержать подразделы OpenWithList или OpenWithProgID с несколькими записями, чтобы открыть файл из списка нескольких браузеров, редакторов или других приложений.

HKLM\Software\Classes\ и HKCU\Software\Classes работают одинаково (один из них имеет приоритет над другим). В простейшем форма существует раздел реестра для расширения файла (например, HKCR.txt), значением по умолчанию которого является соответствующий ProgID (e.g, txtfile). В дополнение к, или вместо, по умолчанию, могут быть дополнительные программы, имена указаны на "OpenWithProgID" подраздел (например, txtfile и так), и/или дополнительное приложение имена, упомянутые в подразделах "OpenWithList" (например, в блокноте++.exe, Opera.EXE-файл, браузер Firefox.исполняемый.)

каждый ProgID определен в другом ключе в HKCR (например, HKCR\txtfile). Этот ключ содержит подразделы для указания windows, какой значок использовать и как открыть, распечатать, распечатать и т. д. связанный файл (e.,g, HKCR\txtfile\shell\open\команда). Аналогично, каждое имя приложения определяется как подраздел HKCR\Applications (например, HKEY_CLASSES_ROOT\Applications\Firefox).exe\shell\открыть\команда).

в дополнение к ключу HKCU\Software\Classes, сопоставления файлов учетных записей пользователей находятся в В HKCU\программное обеспечение\Microsoft\окна\CurrentVersion равное\Эксплорер\FileExts ключ. Эти записи предназначены не только для Проводника Windows, как было предложено, но являются дополнительным источником переопределений сопоставления файлов учетных записей пользователей. Записи создаются средствами сопоставления файлов в проводнике (Explorer \ Tools \ Folder Options \ File Types) и содержат OpenWithList и/или подраздел OpenwithProgID для каждого указанного расширения файла.

чтобы определить ассоциацию файлов, Windows сначала Записи HKCU для соответствующего расширения файла. Записи HKLM вступают в игру, только если они не найдены. (Примечание: Я не тестировал, который имеет приоритет-HKCU \ Software\Classes или HKCU\MIcrosoft\Windows\CurrentVersion\Explorer\FileExts, но я подозреваю, что это будет ключ FileExts). Аналогично, если ссылка progid или имя приложения не нашли в HKCU, в HKLM записи ищутся. (Обратите внимание, что \Applications\ entries - это просто произвольное имя, хотя они обычно идентичны фактическое имя exe-файла на диске.)

таким образом, чтобы определить ассоциацию файлов для конкретной учетной записи пользователя, создайте записи в кусте HKCU. Чтобы определить связь для всех пользователей, создайте записи в кусте HKLM (HKCR) и удалите все ссылки в кусте HKCU на этот тип файлов. Очевидно, что вам нужны соответствующие права доступа к разделам реестра.

Я не использую инструменты assoc и ftype, поскольку предпочитаю использовать RegEdit в интерактивном или пакетном режиме, но из других комментарии кажется, что они работают только на куст HKLM и бесполезны для очистки / установки ключей HKCU. Потратьте некоторое время и просмотрите вышеупомянутые ключи с помощью RegEdit, чтобы увидеть больше примеров.

1
отвечен ArtKns 2022-12-22 22:05

Microsoft изменили, как это работает с Windows 8 и далее. Это больше не возможно редактировать реестр, чтобы изменить это. Для цитата Microsoft:

в Pre-Win 8, приложения могут установить обработчик по умолчанию для файла тип / протокол манипулируя реестром, вы можете легко иметь сценарий или групповую политику, манипулирующую реестром. Однако в Win 8 изменения реестра проверяются хэшем (уникальным на пользователя и приложение), который обнаруживает вмешательство приложений. При отсутствии допустимый хэш, мы игнорируем значение по умолчанию в реестре.

способ, которым Microsoft ожидает, что вы измените это сейчас, - это xml-файл, реализованный с помощью групповой политики. Инструкции здесь.

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

0
отвечен pholcroft 2022-12-23 00:22

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх