Ассоциация типов файлов с приложением (C#)

У меня есть несколько вопросов:

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

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

4 ответов


Что касается ассоциаций файлов, я написал ответ ранее, что по крайней мере охватывает "как".

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

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

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

редактировать

As Франси Пенов указал в своем ответе, там is способ изменения локальных ассоциаций файлов на основе каждого пользователя, даже для не-администраторов (вот почему я говорил о "глобальных ассоциациях" в предыдущем абзаце). Он также упомянул, почему идти туда не слишком желательно.


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

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

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

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

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

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


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

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

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

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


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

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

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