Примечание : Все приведенные ниже соображения применимы, даже если вы напрямую изменяете ассоциации файлов в реестре вместо использования API программ по умолчанию.
При первом запуске ваше приложение должно собратьпредыдущие владельцы всех типов файлов, для которых существует, через IApplicationAssociationRegistration::QueryCurrentDefault
и сохраните их в хранилище, принадлежащем вашему приложению.
При удалении ваше приложение должно использовать IApplicationAssociationRegistration::SetAppAsDefault
попытаться восстановить любое сопоставление файлов, которое все еще принадлежит предыдущему владельцу.Для ассоциаций, которыми ваше приложение все еще владеет, но не знает предыдущих владельцев, перейдите в реестр HKCR
и удалите соответствующую запись типа расширения, протокола или MIME.Не прикасайтесь к каким-либо ассоциациям, ваше приложение не является текущим владельцем - вы перезапишете выбор пользователя.
Я бы очень хотел, чтобы пакетное резервное копирование при первом запуске и очистка при удалении были предоставлены какодин вызов API из API программ по умолчанию, но пока они не решат обобщить это поведение для всех приложений, вы будете самостоятельно.
Обратите внимание, что очистка, выполняемая вашим приложением при удалении, будет зависеть отдеинсталлирующий пользователь.Любые другие пользователи, которые могли использовать приложение и изменили свои настройки по умолчанию, не будут очищены.
Вы можете автоматизировать очистку для каждого пользователя, добавив простую задачу для каждого пользователя, которая выполняет описанные выше шаги в планировщике задач.,Задача будет запланирована на выполнение один раз, а затем удалит себя из пользовательского планировщика задач.Единственная потенциальная проблема с этим подходом состоит в том, что, поскольку вы не знаете, сколько пользователей будет, вы не сможете узнать, когда удалить dll для этой задачи с машины.Опять же, если вы оставите эту DLL в папке ProgramData, это не имеет большого значения.