Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как обновить ресурсы исполняемого файла `explorer.exe` через WinAPI

Delphi , Файловая система , Ресурсы

Как обновить ресурсы исполняемого файла explorer.exe через WinAPI

Пользователь столкнулся с проблемой обновления битмапа внутри исполняемого файла explorer.exe и не смог это сделать, используя WinAPI. Вопрос заключается в том, что при вызове функции UpdateResource происходит ошибка, и требуется выяснить, в чем заключается проблема.

Описание проблемы

Пользователь попытался обновить битмап внутри исполняемого файла exe, используя ресурс с именем 6801, который он увидел в Resource Hacker. Для этого был написан следующий код на Object Pascal (Delphi):

ResUpdate:=BeginUpdateResource(Pchar(szExplorer),false);
ShowMessage(SysErrorMessage(GetLastError));
if ResUpdate<>0 then
begin
  FS:=TFileStream.Create(szBitmap,fmOpenRead or fmShareDenyWrite);
  SetLength(thebmp,FS.Size);
  dwSize:=FS.Size;
  FS.ReadBuffer(thebmp[0],FS.Size);
  FS.Free;
  UpdateResource(ResUpdate,RT_BITMAP,MAKEINTRESOURCE(6801),LANG_SYSTEM_DEFAULT,@thebmp[0],dwSize);
  EndUpdateResource(ResUpdate,false);
end;

Однако вызов UpdateResource завершается неудачей, и требуется определить, в чем заключается ошибка.

Подтвержденный ответ

В подтвержденном ответе указано, что проблема может заключаться в том, что функция BeginUpdateResource возвращает ошибку 50, что соответствует Error_Not_Supported. Пользователь пытался обновить битмап "Start orb" в Windows Explorer, что требует закрытия explorer.exe перед попыткой изменения его ресурсов.

Важные моменты

  • Необходимо закрыть explorer.exe перед обновлением его ресурсов.
  • Использование BeginUpdateResource и UpdateResource для изменения файлов, которые могут быть защищены (например, системные файлы), может быть ограничено системой.

Пример кода

// Закрыть explorer.exe перед выполнением
// ...
// Обновление ресурса
ResUpdate := BeginUpdateResource(PChar(szExplorer), False);
if ResUpdate <> 0 then
begin
  // Чтение файла битмапа
  FS := TFileStream.Create(szBitmap, fmOpenRead or fmShareDenyWrite);
  // ...
  // Обновление ресурса с идентификатором 6801
  UpdateResource(ResUpdate, RT_BITMAP, MAKEINTRESOURCE(6801), LANG_SYSTEM_DEFAULT, @thebmp[0], dwSize);
  // Завершение обновления ресурсов
  EndUpdateResource(ResUpdate, False);
end;
// Обработка возможных ошибок

Рекомендации

  • Убедитесь, что explorer.exe закрыт перед попыткой обновления его ресурсов.
  • Проверьте, что нет других процессов, использующих explorer.exe, которые могут блокировать доступ к файлу.
  • Учитывайте, что системные файлы могут быть защищены от изменения, и любые изменения могут быть сброшены после обновления системы.

Заключение

Обновление ресурсов исполняемого файла explorer.exe через WinAPI возможно, но требует закрытия самого explorer.exe перед выполнением операций обновления. Важно также учитывать системные ограничения и потенциальные риски, связанные с изменением системных файлов.

Создано по материалам из источника по ссылке.

Пользователь пытается обновить ресурс (битмап) исполняемого файла `explorer.exe` с помощью функций WinAPI, но сталкивается с ошибкой при вызове функции `UpdateResource`.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Ресурсы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 12:09:55/0.0034868717193604/0