Удаление зарегистрированных ассоциаций файлов ICO в Windows 10
В статье рассматривается проблема удаления зарегистрированной ассоциации файлов с расширением .ico для графического приложения, разработанного на Delphi. В процессе разработки программ, особенно в области работы с файлами и их регистрацией в операционной системе Windows, важно понимать механизмы взаимодействия программы с системными компонентами.
Регистрация ассоциации
Для начала стоит вспомнить процесс регистрации ассоциации для .ico файлов. В примере кода используется функция DSiRegisterUserFileAssoc, которая позволяет связать тип файла с приложением и его параметрами:
После выполнения данного кода в реестре создаются соответствующие ключи с правильными значениями.
Проблема удаления ассоциации
Когда разработчик пытается отменить регистрацию для .ico файлов через функцию DSiUnregisterUserFileAssoc, возникает проблема: ключ progID не удаляется из реестра, и двойной клик по файлу .ico в Проводнике все еще открывает приложение.
procedure TForm1.btnUnregisterClick(Sender: TObject);
begin
DSiUnregisterUserFileAssoc('UGAICOFile');
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
Решение проблемы
Проблема заключается в недостаточном уровне доступа к реестру для функции DSiUnregisterUserFileAssoc. Для решения данной проблемы можно использовать стандартные средства Delphi для работы с реестром без использования сторонних библиотек. Пример удаления ассоциации:
var Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
// Удаляем ключи, созданные при регистрации
Reg.DeleteKey('\Software\Classes\.ico');
Reg.DeleteKey('\Software\Classes\UGAICOFile');
// Другие необходимые для удаления ключи
finally
Reg.Free;
end;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
Такой подход позволяет полностью контролировать процесс удаления ассоциации и не зависит от сторонних библиотек.
Заключение
В данной статье была рассмотрена проблема с удалением зарегистрированных ассоциаций файлов .ico в операционной системе Windows 10. Было показано, как использовать стандартные средства Delphi для работы с реестром и устранения возникшей проблемы.
Подтвержденный ответ
Удаление ассоциации файлов с помощью функции DSiUnregisterUserFileAssoc не удалось из-за недостаточного уровня доступа к реестру. Использование стандартных средств Delphi для работы с реестром позволило успешно удалить ключи, созданные при регистрации.
Альтернативный ответ
В качестве альтернативного решения можно использовать функцию DSiKillRegistry, которая позволяет удалить указанные ветки реестра с полным доступом:
Удаление зарегистрированных ассоциаций файлов ICO в Windows 10 можно осуществить с помощью стандартных средств Delphi для работы с реестром, поскольку функция `DSiUnregisterUserFileAssoc` не удаляет все необходимые ключи из-за ограничений доступа.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.