Скрипт для привязки расширения к программе
-
03-07-2019 - |
Вопрос
Мой клиент заменяет MS Office на OpenOffice на некоторых рабочих станциях.Моя программа экспортирует файл в Excel, используя расширение .xml (используя открытый формат), и открывает его с помощью текущей связанной программы (используя ShellExecute)
Проблема в том, что OpenOffice не регистрирует связанное с ним расширение .xml.
Ручная ассоциация работает нормально, но я хочу создать файл .reg или что-то еще, чтобы легко изменить настройки.
Я просматриваю реестр на компьютере с уже внесенными изменениями, но
"HKEY_CLASSES_ROOT\.xml"
ключ не содержит ничего, ссылающегося на OpenOffice.
Где хранится ассоциация?Как я могу создать скрипт для выполнения этой работы?
Решение
Реальная ассоциация хранится в ключе, который "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/?
рекомендуется командование.Первое решение более безопасно.
Другие советы
рассмотрим команду dos assoc
:
C: > assoc /? Отображает или изменяет расширение файла объединения р>
ASSOC [.ext [= [fileType]]]
.ext Указывает файл расширение, чтобы связать тип файла with 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 р>