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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
10
0
12 520
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

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

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

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

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

Ответ принят как подходящий

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

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

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

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

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

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

Другая проблема заключается в том, что если ваше приложение выйдет из строя, оно оставит неправильно связанное расширение. Очень неприятно иметь программу, которая изменяет настройки компьютера таким образом и оставляет их «поврежденными» при сбое.

Euro Micelli 03.06.2009 03:30

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

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

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

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

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

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

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