Скрипт для привязки расширения к программе - PullRequest
9 голосов
/ 17 октября 2008

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

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

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

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

"HKEY_CLASSES_ROOT\.xml" 

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

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

Ответы [ 4 ]

17 голосов
/ 17 октября 2008

Реальная ассоциация хранится в ключе, на который указывает "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/?. Первое решение безопаснее.

2 голосов
/ 17 октября 2008

рассмотрим команду dos assoc:

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

ASSOC [.ext [= [fileType]]]

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

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

1 голос
/ 18 сентября 2012

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

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

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

0 голосов
/ 15 сентября 2010

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

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

...