Я имею в виду конкретно windows 7.
У меня есть код, который связывает определенное расширение с моим приложением, как предложено webJose на следующей странице:
Какие разделы реестра отвечают за сопоставление расширений файлов?
(Однако я правильно пишу в HKEY_CURRENT_USER \ Software \ Classes вместо HKEY_CLASSES_ROOT, как это было предложено)
Вышеуказанное работает изначально, или если нет других программ, связанных с расширением. Однако после использования встроенной в Windows 7 программы «Выбрать программу по умолчанию ...» (находится в контекстном меню, вызываемом правой кнопкой мыши в разделе «Открыть с помощью»), оно повторно связывает расширение с любой новой программой, которую вы выберете.
В этот момент происходит то, что «HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \\ UserChoice» изменяется системой, и поэтому вновь выбранная программа вступает во владение.
Запустив приведенный выше код, восстановить контроль над расширением не получится. Единственный способ восстановить контроль - либо:
- Редактирование значения UserChoice -> Progid, которое недопустимо (ни программно, ни с помощью regedit.exe - доступ запрещен).
- Или удалив значение UserChoice и убедившись, что ваше приложение является первым в значении MRUList в \ OpenWithList (это может быть достигнуто с помощью regedit.exe, но не программно)
Мой вопрос: есть ли способ достичь этого программно? Какие значения реестра можно изменить, чтобы восстановить контроль над расширением после того, как он связан с другой программой?
Я знаю, что может показаться очевидным, что если пользователь через проводник устанавливает для связанного приложения расширение, то ожидается, что он будет делать то же самое, чтобы повторно связать расширение с другим приложением.
Проблема, однако, заключается в том, что в моем приложении есть кнопка, которая использует вышеупомянутый код для проверки связи с моим приложением. К сожалению, в описанной выше ситуации мое приложение отображает сообщение, подтверждающее, что расширение уже успешно связано, когда его нет! Так есть ли способ обойти это?