Вопрос

Мой клиент заменяет 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top