Единственный способ справиться с этим - это способ, аналогичный тому, который Visual Studio использует для обработки .sln
файлов, который является Селектором версий Visual Studio .Это приложение связывается с .sln
файлами и дескрипторами, предоставляя значок и возможный процесс для обработки конкретного .sln
файла.Предполагая, что у вас установлена Visual Studio, посмотрите в реестре на HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln
, чтобы увидеть, как это делается.
Итак, в основном вам необходимо:
- Написать исполняемый файл, который может решить, что делать с
.xml
файлами - Зарегистрировать процесс как ответственный за обработку
.xml
files - Поместите логику в ваш исполняемый файл или в конфигурацию, которую использует ваш исполняемый файл, который решает, что делать для каждого файла.
Для значков посмотритена подключ ShellEx\IconHandler
.Вы увидите, что он указывает (на компьютере x64 с установленной Visual Studio 2010) HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{9A2B23E4-2A50-48DB-B3C3-F5EA12947CB8}
, в котором в InprocServer32
указан DLL, отвечающий за предоставление значков для файлов, в данном случае C:\Program Files (x86)\Common Files\Microsoft Shared\MSEnv\VSFileHandler.dll
.Вам нужно будет реализовать аналогичную DLL, которая разделяет конфигурацию / логику процесса запуска, чтобы определить, какой значок показывать для каждого файла.
Обычное предупреждение: Написание расширений оболочкив управляемом коде всегда было большое «нет нет», потому что расширения оболочки загружаются в любой процесс, который показывает общие файловые диалоги.Это может вызвать веселый хаос, так как вплоть до .net 4.0 в процесс может быть загружена только одна версия CLR, поэтому вы должны быть очень уверены перед этим.Учитывая, что .net 4.0 поддерживает в процессе работы параллельно , это не может быть проблемой для вас.