Значки и ассоциации файлов для расширений файлов перечислены в реестре. Более конкретно, записи HKEY_CLASSES_ROOT\.ext
содержат тип содержимого, воспринимаемый тип, а в значении (Default)
- фактическую связь. Например, файлы .cs имеют значение по умолчанию VisualStudio.cs.9.0
(у меня VS 2008). Вы можете проверить HKEY_CLASSES_ROOT\VisualStudio.cs.9.0
, чтобы увидеть значок, программу и команды, связанные с этим типом файла. В частности, HKEY_CLASSES_ROOT\VisualStudio.cs.9.0\DefaultIcon
- это запись, которая сообщает проводнику, какой значок показывать для файлов этого типа. Он указывает на двоичный файл и идентификатор ресурса в этом двоичном файле.
Когда вы связываете тип файла с программой с помощью правого клика -> Открыть с помощью ..., вы не указываете значок по умолчанию, поэтому Explorer берет значок вашего приложения и накладывает его на общий значок документа.
Правильный подход состоит в том, чтобы включить в вашу настройку соответствующие записи реестра, чтобы связать тип файла с вашим приложением и вашим значком. Точные значения реестра, которые вам нужно включить, зависят от команд, которые вы хотите добавить в контекстное меню для этого типа файлов, но, по крайней мере, вам нужна команда Open. В случае файлов .cs вы можете видеть, что есть запись HKEY_CLASSES_ROOT\VisualStudio.cs.9.0\Shell\Commands\Open
со значением (Default)
, содержащая приложение, которое запускается при вызове команды Open. (Вы можете пока игнорировать ddeexec
часть)
Имейте в виду, что HKEY_CLASSES_ROOT
является отображением двух ветвей реестра: HKEY_CURRENT_USER\Software\Classes
и HKEY_LOCAL_MACHINE\Software\Classes
. Если вы хотите, чтобы ваша файловая ассоциация была для всех пользователей, вам нужно написать HKEY_LOCAL_MACHINE
. Ваша установка должна быть запущена от имени администратора, чтобы сделать это. В противном случае, попытка записи в HKEY_CLASSES_ROOT
либо не удастся при отказе в доступе, либо записи в HKEY_CURRENT_USER
и сделает сопоставление только для текущего пользователя. (То, что именно из этого произойдет, зависит от нескольких вещей, например, от того, что представляет собой ОС, от того, является ли пользователь администратором, но не от повышенного уровня и т. Д.)
Вы можете прочитать обо всем этом в Настройка типов файлов (связей файлов) в MSDN. В частности, Типы файлов и Регистрация программ с помощью клиентских программ даст вам основы того, как именно это сделать.