Программа не отображается в списке «Открыть с помощью», но отображается в разделе «Выбрать другое приложение». - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь, чтобы моя программа отображалась в списке «Открыть с помощью ...», но по какой-то причине я могу видеть ее только в том случае, если я нажимаю «Открыть с помощью» -> «Выбрать другую». приложение". Я пытаюсь связать расширение файла с моей программой и позволить пользователю выбрать, с какой версией программы он хочет открыть файл. Пока что мой файл .nsi обрабатывает ассоциации файлов примерно так:

WriteRegStr SHCTX "Software\Classes\.foo" "" "Foo File"
WriteRegStr SHCTX "Software\Classes\.foo\OpenWithProgIds" "FOO_2_0" ""
WriteRegStr SHCTX "Software\Classes\FOO_2_0\shell\open" "FriendlyAppName" "Foo 2.0"
WriteRegStr SHCTX "Software\Classes\FOO_2_0\shell\open\command" "" "${install_dir}"

Я могу видеть разные версии, которые я установил (2.0, 2.1 и т. Д.), Когда я перехожу к «Выбрать другое приложение», но я бы хотел, чтобы эти опции были доступны пользователю прямо из « Открыть с помощью «списка. Я что-то пропустил? Я тоже пытался использовать WriteRegStr SHCTX "Software\Classes\.foo\OpenWithList" "FOO_2_0" "", но ничего не получилось.

1 Ответ

0 голосов
/ 29 августа 2018

WriteRegStr SHCTX "Software\Classes\.foo" "" "Foo File" неверно, значение по умолчанию должно указывать на ваш ProgId (FOO_2_0), это , а не описание типа. Это не причина, по которой он не отображается в меню.

Я считаю, что Windows проверяет некоторые вещи и не будет отображать ваше приложение в меню, если:

  • Это уже команда по умолчанию для этого расширения файла, и / или нет других "открытых с" регистраций другими приложениями.
  • Команда под shell\open\command недопустима. Если нет правильного пути / имени, он не может извлечь значок.

Часть этой информации также кэшируется в недокументированном ключе Explorer FileExts и может привести к ложным срабатываниям во время тестирования.

Похоже, это меню:

!define open_command "cmd.exe" ; A valid icon source but not really a open command
WriteRegStr SHCTX "Software\Classes\.foo" "" "Paint.Picture" ; Simulate registration taken over by another application
WriteRegStr SHCTX "Software\Classes\.foo\OpenWithProgIds" "FOO_2_0" ""
WriteRegStr SHCTX "Software\Classes\FOO_2_0\shell\open" "FriendlyAppName" "Foo 2.0"
WriteRegStr SHCTX "Software\Classes\FOO_2_0\shell\open\command" "" '${open_command}'

Open with menu

Вы действительно должны изменить имя ${install_dir}, это должно быть что-то вроде !define open_command '"$instdir\myapp.exe" "%1"'

...