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