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