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