Значки и ассоциации файлов для расширений файла перечислены в реестре. Строго говоря, 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
запись, которая говорит Проводник который значок показать для файлов этого типа. Это указывает на двоичный файл и идентификатор ресурса в том двоичном файле.
Когда Вы связываетесь, тип файла с программой посредством щелчка правой кнопкой-> Открывают With..., Вы не указываете значок по умолчанию, таким образом, Проводник берет значок Вашего приложения и накладывает его по универсальному значку документа.
Правильный подход должен был бы включать как часть Вашей установки соответствующие ключи реестра для соединения типа файла с приложением и значком. Точный реестр оценивает Вас, должен включать, зависят от команд, которые Вы хотите добавленный к контекстному меню для того типа файла, но по крайней мере Вы хотите команду 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
и сделайте ассоциацию только для текущего пользователя. (Какой из двух точно произойдет, зависит от нескольких вещей, как то, какова ОС, является ли пользователь администратором, но не поднятый и так далее),
Можно читать обо всем этом в разделе Customizing File Types (Files Associations) по MSDN. В частности, Типы файлов и Регистрирующиеся Программы с Клиентскими Программами дали бы Вам основы того, как точно сделать это.