Ассоциации файлов Windows сделаны правильно?

Я хочу настроить свое приложение на ассоциацию файлов в Windows (дополнительная сложность: расширение файла может конфликтовать с каким-либо другим несвязанным приложением). Как лучше всего справиться с такой ситуацией? Скорее всего, у пользователя не будет и того, и другого, но если они есть, что лучше всего сделать?

Я искал stackoverflow и различные другие сайты в Интернете и имею общее представление о том, как это сделать (я пробовал, и он работает), но не могу найти исчерпывающую ссылку о том, как это лучше всего сделать.

В некоторых справочниках говорится, что нужно помещать записи в реестр в HKEY_CLASSES_ROOT. Некоторые говорят, что не делайте этого, а вместо этого поместите это в HKEY_LOCAL_MACHINE \ Software \ Classes.

Нужно ли также регистрировать приложение в HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ App Paths или HKEY_CLASSES_ROOT \ Applications (и является ли это даже технически правильным местоположением со ссылкой на обсуждение HKEY_CLASSES_ROOT и HKEY_LOCAL_MACHINE \ Software \ Classes выше)?

Я также видел несколько страниц с советами по настройке "CurVer" и "OpenWithProgids", но я не уверен, как они могут помочь.

Я обнаружил, что могу просто создавать

HKEY_LOCAL_MACHINE \ Software \ Classes.aaa (по умолчанию) AAAapp

HKEY_LOCAL_MACHINE \ Software \ Classes \ AAAapp (по умолчанию) AAAapp DefaultIcon "% mypath% \ to \ AAAappIcon.ico" shell \ open \ command "% mypath% \ to \ AAAapp.exe" "% 1"

и это работает. Я не создавал раздел реестра App Paths или Applications, поэтому эти ключи не влияют на это. Кроме того, вышеупомянутое, похоже, не предусматривает хорошей обработки случая, когда в системе уже существует ассоциация для расширения файла «.aaa».

Любое руководство приветствуется!


person user5070126    schedule 01.07.2015    source источник


Ответы (1)


Старый вопрос - без ответа в течение 7,5 месяцев - но следующее может помочь будущим гуглерам (например, мне).

HKEY_CLASSES_ROOT - это комбинированное представление

  • HKEY_ LOCAL_MACHINE \ Software \ Classes
  • HKEY_ CURRENT_USER \ Software \ Classes.

Вы не должны писать в HKEY_CLASSES_ROOT, просто используйте его только для чтения. Кроме того, рекомендуется писать в HKEY_CURRENT_USER \ Software \ Classes, а не в HKEY_LOCAL_MACHINE, если вам действительно не нужно настраивать параметры для всех пользователей.

Документация Microsoft кажется довольно многословной и разрозненной, поэтому у меня уходит много времени, чтобы определиться с тем, что именно мне нужно сделать для моего собственного маленького приложения. Но все же может быть лучше сначала попробовать официальную документацию (если кто-то не может указать нам место, которое лучше объясняет), а потом задавать вопросы, если никто не может понять ее.

Отправной точкой для документации Microsoft по этой области являются «Технологии настольных приложений» по адресу https://msdn.microsoft.com/library/windows/desktop/bg126469.aspx

Что касается регистрации типа файла, это привело меня к «Реализации пользовательского формата файла» по адресу https://msdn.microsoft.com/en-us/library/windows/desktop/ff521657(v=vs.85).aspx

Оттуда перейдите в «Типы файлов и ассоциации файлов», и оттуда подменю охватывают все, что вам нужно (и многое другое).

Не забудьте написать в HKCU \ Software \ Classes. Кажется, что когда в документации написан HKEY_CLASSES_ROOT (HKCR), часто это просто удобный способ ссылки на (HKCU | HKLM) \ Software \ Classes.

О «HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ App Paths» или «HKEY_CLASSES_ROOT \ Applications»:

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

Некоторые места, кажется, говорят, что «Пути приложений» предпочтительнее, но на самом деле вам может потребоваться использовать оба, потому что «Пути приложений» на самом деле относятся только к путям и вещам вроде SupportedTypes и FriendlyAppName находятся только в «HK (LM | CU) \ Classes \ Applications».

person j77h    schedule 14.02.2016