Скрипт для привязки расширения к программе

Мой клиент заменяет MS Office на OpenOffice на некоторых рабочих станциях. Моя программа экспортирует файл в Excel, используя расширение.xml (используя открытый формат), и открывает его, используя текущую связанную программу (используя ShellExecute)

Проблема в том, что OpenOffice не регистрирует расширение.xml, связанное с ним.

Вручную ассоциация работает нормально, но я хочу сделать.reg или что-то, чтобы легко изменить настройку.

Я смотрю в реестре на ПК с уже внесенными изменениями, но

"HKEY_CLASSES_ROOT\.xml" 

ключ не имеет ничего ссылающегося на OpenOffice.

Где хранится ассоциация? Как я могу сделать сценарий для работы?

4 ответа

Решение

Настоящая ассоциация хранится в ключе, который "HKEY_CLASSES_ROOT\.xml" указывает на.

На моей машине значение этого ключа по умолчанию говорит "xmlfile"Скорее всего, то же самое для вас.

Итак, давайте перейдем к "HKEY_CLASSES_ROOT\xmlfile", Там вы можете увидеть (и изменить), какая команда будет использоваться для запуска файла такого типа:

HKEY_CLASSES_ROOT\xmlfile\shell\open\command

Windows использует этот тип перенаправления для сопоставления нескольких расширений файлов с одним и тем же типом файла и, следовательно, с одним и тем же приложением.

Под "HKEY_CLASSES_ROOT\xmlfile\shell" Есть несколько подразделов, которые напоминают "глаголы" того, что вы можете сделать с файлом. Опять же, значение по умолчанию "shell" ключ решает, какой из этих глаголов используется, если дважды щелкнуть файл. В моем случае это "open",

Заключение:

Обладая этими знаниями, самый простой способ создать сценарий ассоциации - это использовать regedit для экспорта файла.reg, содержащего это изменение, и применить его к целевому компьютеру двойным щелчком мыши или:

regedit /s new_xml_association.reg

или (если вы используете XP или выше и знаете, что делаете), перезапишите текущее значение с помощью:

reg add "HKEY_CLASSES_ROOT\xmlfile\shell\open\command" /ve /d "path\to\program %1"

Во всяком случае, более глубокий взгляд на reg add/? Команда рекомендуется. Первое решение безопаснее.

Рассмотреть команду дос assoc:

C:> Assoc /? Отображает или изменяет ассоциации расширений файлов

ASSOC [.ext [= [fileType]]]

.ext Указывает расширение файла, чтобы связать тип файла с fileType Указывает тип файла, чтобы связать с расширением файла

Введите ASSOC без параметров, чтобы отобразить текущие ассоциации файлов. Если ASSOC вызывается только с расширением файла, он отображает текущее сопоставление файлов для этого расширения файла. Ничего не указывайте для типа файла, и команда удалит ассоциацию для расширения файла.

Использование ассоциаций файлов в этом случае кажется неправильным. Вы хотите, чтобы ваше приложение открывало файл в OpenOffice, но что, если ваш пользователь хочет оставить нетронутым сопоставление файлов для файлов XML? Что, если что-то еще в их системе также зависит от этой ассоциации? Вы нарушаете их систему в этом случае. Если вы ИТ-специалист, то, возможно, это нормально (все еще сомнительная практика программирования), но если нет, то это плохая вещь.

Используйте реализацию OpenOffice COM, чтобы открыть файл.

Хороший простой пример здесь: http://www.kalitech.fr/clients/doc/VB_APIOOo_en.html

Я только столкнулся с этим, ища тот же самый ответ. Я нашел лучшее решение, используя Windows FindExecutable API, который можно использовать из C# с помощью PInvoke.

http://www.pinvoke.net/default.aspx/shell32.findexecutable

Другие вопросы по тегам