Ответ 1
Механизм открытия документов Office.xml
Для документов Word, сохраненных в XML и имеющих расширений .xml, Microsoft внедрила специальный обработчик для открытия этих файлов в соответствующем приложении (этот механизм используется не только для документов Word, но также для электронных таблиц Excel, форм InfoPath и некоторых других форматов).
Если вы проверите реестр, вы увидите, что тип файла для файлов с расширением .xml установлен на xmlfile
:
HKEY_CLASSES_ROOT\.xml (Default) = "xmlfile"
Команда, выполняемая при открытии этого типа файла, указана в
HKEY_CLASSES_ROOT\xmlfile\shell\open\command = ""C:\Program Files\Common Files\Microsoft Shared\OFFICE12\MSOXMLED.EXE" /verb open "%1""
Итак, когда XML файл дважды щелкнут в проводнике, Windows запустит MSOXMLED.EXE. Это приложение теперь просматривает XML файл и ищет инструкцию обработки XML. Эта команда обработки с именем mso-application может указывать ProgId:
<?mso-application progid="Word.Document"?>
Если эта команда обработки найдена и ProgId является одним из поддерживаемых значений, MSOXMLED.EXE ищет реестр для команды open, указанной для этого ProgId. Для Word.Document на самом деле существует другое перенаправление на Word.Document12 (если Office 2007 установлен) с помощью подраздела CurVer Word.Document, поэтому мы получаем:
HKEY_CLASSES_ROOT\Word.Document.12\shell\Open\command = ""C:\Program Files\Microsoft Office\Office12\WINWORD.EXE" /n /dde"
Итак, наконец, MSOXMLED.EXE запустит соответствующее приложение Office или запустит XML-приложение по умолчанию, указанное в
HKEY_CLASSES_ROOT\XEV.GenericApp\shell\open\command
Вы можете попробовать это, вызывая MSOXMLED.EXE из командной строки:
MSOXMLED.EXE /verb OPEN "SampleWordMLDocument.xml"
Если вы хотите реализовать такое же поведение, вам придется реализовать обработчик, такой как MSOXMLED.EXE, который просматривает файл для предопределенной инструкции по обработке, а затем направляет документ в соответствующее приложение.
Обработка значков
Выше мы рассмотрели способ обработки и редактирования документа. Другой механизм отвечает за отображение определенного значка в зависимости от инструкции обработки внутри документа XML: обработчик значков.
Обработчики значков - это тип расширений оболочки Explorer, которые являются COM-объектами в процессе, которые могут быть связаны с определенными типами файлов. Тот, который используется для файлов XML, указан в реестре под
HKEY_CLASSES_ROOT\xmlfile\ShellEx\IconHandler = "{AB968F1E-E20B-403A-9EB8-72EB0EB6797E}"
Этот GUID ссылается на файл MSOXEV.dll, который, как и MSOXMLEX.EXE, проверяет XML файл для ProgId, а затем предоставляет правильный значок.
Поскольку все это довольно сложный механизм, вы должны тщательно подумать, хотите ли вы пойти этим путем. По-моему, гораздо проще зарегистрировать новое уникальное расширение файла. Он также ограничен, так как он будет работать только с типами файлов, которые позволят вам включить в заголовок файла какую-либо пользовательскую информацию (как ProgId).
Microsoft больше не использует этот метод и вместо этого использует расширения файлов для своих новых форматов OpenXML (см. Почему файлы Office.xml ведут себя иначе, чем другие ".xml" .).