Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

РЕДАКТИРОВАТЬ

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

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