Связь типа файла с приложением (C #) - PullRequest
8 голосов
/ 21 октября 2008

У меня есть несколько вопросов, связанных:

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

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

Ответы [ 4 ]

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

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

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

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

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

EDIT

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

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

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

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

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

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

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

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

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

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

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

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

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

1 голос
/ 21 октября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...