Windows Shell: как связать разные xml-файлы с разными приложениями? - PullRequest
3 голосов
/ 11 апреля 2011

У меня есть много видов xml-файлов (все с расширением .xml) с разными именами корневых элементов и пространством имен.Я хочу связать каждый тип с отдельным приложением, а также дать возможность иметь разные значки файлов для каждого типа.Можно ли это сделать с помощью C # .NET?

Ответы [ 3 ]

2 голосов
/ 11 апреля 2011

Единственный способ справиться с этим - это способ, аналогичный тому, который Visual Studio использует для обработки .sln файлов, который является Селектором версий Visual Studio .Это приложение связывается с .sln файлами и дескрипторами, предоставляя значок и возможный процесс для обработки конкретного .sln файла.Предполагая, что у вас установлена ​​Visual Studio, посмотрите в реестре на HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln, чтобы увидеть, как это делается.

Итак, в основном вам необходимо:

  1. Написать исполняемый файл, который может решить, что делать с .xml файлами
  2. Зарегистрировать процесс как ответственный за обработку.xml files
  3. Поместите логику в ваш исполняемый файл или в конфигурацию, которую использует ваш исполняемый файл, который решает, что делать для каждого файла.

Для значков посмотритена подключ 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 поддерживает в процессе работы параллельно , это не может быть проблемой для вас.

0 голосов
/ 11 апреля 2011

Нет способа, которым вы могли бы сделать это, не имея пользовательских расширений или посреднической программы.

Возможно, один из вариантов - иметь собственное приложение, назначенное для обработки файлов XML.Когда эта программа запускается, она определяет, какой «тип» файла использует один из тегов XML, и соответственно запускает правильный процесс.Однако маловероятно, что вы можете давать разные «типы» разным значкам.

0 голосов
/ 11 апреля 2011

Нет. Для Windows файл XML - это файл XML. ОС не заглядывает внутрь, чтобы увидеть, какое пространство имен связано с ней; это всего лишь файл XML.

Windows связывает типы файлов с их расширением, поэтому, опять же, все файлы XML являются файлами XML. Вы можете убедиться в этом сами: переименуйте обычный .txt файл, который не содержит XML, а затем обновите представление его папки в Проводнике. Вы увидите, как значок изменится с изображения текстового файла на изображение файла XML.

...