ilyachalov (ilyachalov) wrote,
ilyachalov
ilyachalov

Обновления DLL

Начало тут:
1. динамически подключаемые библиотеки;
2. о динамически подключаемых библиотеках подробнее;
3. преимущества динамического связывания;
4. создание динамически подключаемой библиотеки;
5. функция точки входа DLL;
6. динамическое связывание во время запуска;
7. динамическое связывание во время выполнения;
8. порядок поиска DLL;
9. данные библиотеки DLL;
10. перенаправление DLL.

Перевод с английского статьи от 31.05.2018 г. «Dynamic-Link Library Updates»:
https://docs.microsoft.com/ru-ru/windows/win32/dlls/dynamic-link-library-updates
(На данный момент на этом сайте нет перевода этой статьи на русский, есть только версия на английском.)

Время от времени возникает необходимость заменить библиотеку DLL более новой версией. Перед заменой DLL следует выполнить проверку версий, чтобы гарантировать, что вы заменяете старую версию библиотеки ее более новой версией. Можно произвести замену и библиотеки DLL, находящейся в данный момент в использовании. Методика, которой вы можете воспользоваться для замены библиотек DLL, находящихся на данный момент в использовании, зависит от операционной системы, которой вы пользуетесь. Начиная с операционной системы Windows XP (вики: с 24.08.2001 г.) и продолжая более новыми членами линейки операционных систем Windows, приложения должны использовать технологию, описанную в статье «Изолированные приложения и сборки, умеющие работать рядом с другими». [На английском тут речь идет о двух связанных между собой понятиях — «isolated application» и «side-by-side assembly». Под термином «изолированное приложение» подразумевается приложение, на работу которого не могут повлиять обновления других приложений. Изоляция приложения в этом понимании достигается тем, что библиотеки DLL этого приложения являются «сборками, умеющими работать рядом с другими», а под «другими» тут подразумеваются другие версии этой же библиотеки DLL.]

[При обновлении DLL] не будет необходимости перезагружать компьютер, если вы выполните следующие шаги:
  1. используйте функцию MoveFileEx для переименования заменяемой DLL. Не указывайте при вызове этой функции флаг MOVEFILE_COPY_ALLOWED и удостоверьтесь, что переименованный файл находится на том же томе (логическом диске), на котором был размещен оригинальный файл до переименования. Также вы можете просто переименовать файл в том же самом каталоге, дав ему другое расширение;

  2. скопируйте новую DLL в каталог, содержащий переименованную DLL. Теперь все приложения будут использовать новую DLL;

  3. используйте функцию MoveFileEx, указав при ее вызове флаг MOVEFILE_DELAY_UNTIL_REBOOT, чтобы удалить переименованную DLL.

До того момента, как вы закончите эту замену, приложения будут использовать оригинальную [старой версии] DLL, пока она не будет выгружена [из оперативной памяти]. После того момента, как вы закончите эту замену, приложения будут использовать новую DLL. Когда вы пишете DLL, вы должны убедиться, что DLL подготовлена к такой ситуации обновления, особенно, если DLL работает с глобальными переменными [global state information] или взаимодействует с другими службами. Если DLL не подготовлена для такой ситуации обновления в смысле работы с глобальными переменными или протоколами взаимодействия со службами, обновление этой DLL потребует перезагрузки компьютера, чтобы гарантировать, что все приложения используют одну и ту же версию DLL.
Tags: Английский язык, Образование, Программирование
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments