2008-10-21 3 views
8

У меня есть несколько вопросов, связанных с:Filetype ассоциация с применением (C#)

1) можно сделать мою программу изменения типа файла ассоциации, но только тогда, когда работает? Вы видите что-то не так с этим поведением?

2) Другой вариант, который я вижу, это позволить пользователям решить открыть с моим приложением или восстановить ассоциацию по умолчанию ... что-то вроде: «захватить все .lala-файлы» или «восстановить ассоциацию .lala». Как я могу это сделать? Как вы думаете, что это лучший подход?

ответ

7

Что касается ассоциаций файлов, я написал ранее ответ, по крайней мере, covers the "How".

Это также должно указывать на правильное направление обработки и резервного копирования. С прямым доступом к реестру через C# вам не придется использовать .reg-файлы, поэтому вы можете создавать резервные копии предыдущего значения, как вам нравится в своем приложении, а также восстанавливать его оттуда.

Ключевой вопрос: Должно ли изменить ассоциации файлов случайным образом? Очевидно, что, по крайней мере, необходимо было спросить пользователя перед собой (как вы указали).

Кроме того, пользователи Vista с включенными UAC или не имеющими привилегии пользователями других версий Windows могут не иметь требуемого разрешения для изменения глобальных ассоциаций файлов. Процедура установки (un) вашей программы может быть единственным местом, где это может быть успешным.

EDIT

Как Franci Penov indicated in his answer, там это способ изменить местные ассоциации файлов на основе каждого пользователя, даже для не-администраторов (вот почему я говорил о «глобальных ассоциаций» в предыдущем абзаце) , Он также упомянул о том, почему переезд туда не слишком целесообразен.

+4

Другая проблема заключается в том, что если ваше приложение выйдет из строя, оно приведет к неправильному распространению расширения. Очень грустно иметь программу, которая меняет настройки компьютера таким образом, и оставляет их «поврежденными» при сбое – 2009-06-02 23:30:18

2

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

Ассоциации перечислены в HKEY_CLASSES_ROOT в реестре и могут быть сопоставлены целым рядом способов (mime types/progIDs/etc).

Многие приложения, которые я видел, спрашивают, хотите ли вы связать определенные типы файлов с приложением во время установки и дать возможность отключить и оставить текущие настройки.

Я не думаю, что я бы рекомендовал «на лету» ассоциации типов файлов

1

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

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

2) Windows по умолчанию позволяет пользователю выбирать эти параметры, используя щелчок правой кнопкой мыши и команду «открыть с».

3

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

Главное преимущество этого подхода состоит в том, что вам нужно только отключить реестр только один раз.

Основных недостатков этого подхода является:

  • вам нужен процесс вспомогательного
  • приложения, которое «владеет» эти расширения файлов могут обнаружить изменения и жаловаться пользователю, побуждая «ремонт», таким образом, вытащив вас из картины.

В качестве альтернативы вы можете изменить ассоциацию файлов при запуске своей основной программы. Это будет работать даже для пользователей, не являющихся администраторами. в то время как файловые ассоциации хранятся в HKEY_CLASSES_ROOT, есть небольшой трюк - HKCR на самом деле представляет собой карту как HKEY_LOCAL_MACHINE\SOFTWARE\Classes, так и HKEY_CURRENT_USER\SOFTWARE\Classes. Таким образом, вы можете временно зарегистрировать расширение файла для текущего пользователя в HKCU и «теневой» исходной ассоциации из HKLM.

Конечно, я бы посоветовал не подходить к этому подходу, поскольку в вашем приложении требуется только один сбой, чтобы сделать эту связь постоянной, и поскольку очень немногие приложения знают, как бороться с ассоциациями файлов в HKCU, скорее всего, это будет невосстановимая ситуация для исходного приложения.

Смежные вопросы