Метод решения проблем совместимости использование dll

Обновлено: 07.07.2024

Ниже мы рассмотрим проблемы с работой DDL файлов в самых популярных версиях операционной системы Windows, разберем почему возникают проблемы с DLL, а также предоставим способы их устранения.

Содержание:

Динамические исполняемые библиотеки (DLL) представляют собой специальные программные компоненты, которые позволяют обращаться к одному файлу сразу нескольким приложениям. Основным предназначением таких библиотек является расширение возможностей утилит и экономия места, поскольку для использования аналогичных компонентов можно иметь всего одну версию файла, которая будет делиться между всеми программами.

Почему возникают ошибки с DLL?

Ошибки DLL могут возникать по самым различным причинам. Чаще всего они проявляют себя при запуске каких-либо приложений и программ. Нередки случаи, когда ошибки с DLL происходят во время запуска недавно вышедших компьютерных игр или программ.

Из-за ошибок DLL приложение может не корректно работать или вовсе не загружаться, поэтому следует ознакомиться с возможными причинами появления ошибок.

Одной из основных причин возникновения ошибок DLL является простое отсутствие библиотек, которые требуются для работы приложений. Недостающие файлы могут быть удалены самим пользователем, уничтожены вирусами или перезаписанными более старыми версиями в процессе установки программных компонентов. Помимо этого, ошибки могут возникать из-за неправильной работы драйверов, недостающего программного обеспечения, такого как NET Framework, DirectX и т.д.

Ошибки DLL могут быть вызваны и более серьезными проблемами, связанными с жестким диском.

Решение проблем с DDL файлами

DLL библиотеки тесно вплетены в различные системные процессы, поэтому при повреждении некоторых из них операционная система может попросту перестать запускаться. Если это произошло, следует прибегнуть к встроенным средствам восстановления системы. Чтобы попасть в среду восстановления, достаточно вставить загрузочную флешку или диск с Windows либо автоматически попасть в среду после трех неудачных попыток загрузки.

Для быстрого возврата работоспособности системы пользователь может выбрать один из трех пунктов восстановления, представленных в левой части окна среды восстановления.

Если проблема кроется в некорректной работе загрузчика, рекомендуем ознакомиться со способами решения этой проблемы в статье «Как восстановить загрузчик Windows 10».

Недостающие компоненты C++ Runtime Library и DirectX

Чаще всего пользователи сталкиваются с проблемой ошибок DLL, которые связаны с отсутствием необходимых компонентов C++ Runtime Library либо DirectX.

Существует два способа решения проблем с недостающими компонентами DLL. Первый и более правильный – полная переустановка сбойного ПО. Второй – скачивание непосредственно одного компонента, вызывающего ошибку.

Ошибка msvcr100.dll – сбойный компонент в системе безопасности.

Ошибки dxgi.*, d3dx9_25.*, d3d11.*, d3dx9.*, d3dx9_43.*, xinput1_3.*, d3dx9_31.*, xinput1_2.*, d3dx9_31.*, d3dx9_34.*, d3dx9_42.*, x3daudio1_7.*, x3daudio1_6.*, xrsound.* d3dx10_43.*, d3dx9_26.*, d3dx9_30.*, d3dx9_27.*, d3dx11_43.*, d3dcompiler_43.*, d3d10.*.

Ошибка steam_api.dll – распространённая ошибка среди геймеров и пользователей магазина цифровой дистрибуции Steam. Часто возникает при установке пиратских сборок игр и взломанных клиентов Steam.

Важно: мы настоятельно не рекомендуем скачивать отдельные недостающие файлы steam_api.dll, которые можно часто встретить на просторах интернета. Это обусловлено тем, что многие злоумышленники специально распространяют зараженные файлы или шпионские утилиты под видом dll-файлов. Если такой файл попадет на компьютер пользователя, существует большая вероятность утери доступа к аккаунту.

Ошибка xlive – проблемы с файлами цифрового магазина Microsoft.

Ошибка msvcrt.*, msvcr71.*, msvcrt.*, msvcp120.*, msvcp110.* x64 msvcr90.*, msvcr110.*, msvcr100.*, msvcr80.*, msvcr120.*.

Ошибка physxcudart_20.*, physxloader.* и т.д.- проблемы с файлами NVIDIA PHYSX SYSTEM.

Удаление сбойного приложения

В некоторых случаях установка компонентов может не помочь, поскольку проблема кроется в сбойной программе, использующей DLL библиотеки.

Чтобы определить сбойное приложение, необходимо:

Шаг 1. Нажимаем левой кнопкой мыши по иконке «Поиск» (изображение лупы возле кнопки «Пуск») и вводим в строку фразу «Панель управления», после чего переходим в непосредственно сам пункт «Панель управления».

Шаг 2. В открывшемся окне выбираем режим отображения «Категория» и переходим в «Удаление программы».

Шаг 3. В списке установленных программ выбираем метод сортировки по дате и находим приложение, после которого начались проблемы с файлами DLL. Это может быть компьютерная игра, устаревшая версия какой-либо программы или любое другое приложение. Для удаления программы достаточно дважды кликнуть левой кнопкой мыши по её имени и провести деинсталляцию.

Обновление драйверов устройства

Нередки случаи, когда ошибки DLL библиотек возникали из-за устаревшей версии драйверов жестких дисков и другого оборудования. Чтобы исключить эти неисправности следует провести обновление драйверов видеокарты и оборудования. Как правило, это можно сделать на официальных сайтах производителей компонентов.

Помимо этого, рекомендуем проверить драйвера носителей следующим образом:

Шаг 1. Находясь в панели управления выбираем пункт «Оборудование и звук».

Шаг 2. В открывшемся окне переходим в пункт «Диспетчер устройств».

Шаг 3. Переходим во вкладку «Дисковые устройства», выбираем нужный носитель и нажимаем по нему ПКМ, после чего в меню будет доступен пункт «Обновить драйвер».

Другие проблемы с DLL библиотеками

Нередко DLL библиотеки используются вирусами или сами файлы вредоносного ПО маскируются под компоненты DLL. В таком случае следует провести глубокую проверку системы при помощи надёжных антивирусных программ. Стоит понимать, что самые новые вирусы могут не находиться даже передовым программным обеспечением, поэтому при сильном поражении системы рекомендовано провести чистую установку либо выполнить откат системы до предыдущего состояния.

Чтобы сделать это из работающей системы, необходимо:

Шаг 1. Нажать ПКМ по кнопке «Пуск» и выбрать пункт «Выполнить». В открывшемся окне вводим команду «rstrui.exe» и нажимаем «Ок».

Что делать, если важный файл или DLL библиотека были случайно удалены?

Библиотеки DLL, как и любые другие данные, могут пострадать по многим причинам: повреждение вирусами, случайное удаление сочетанием клавиш Shift+Delete, форматирование или изменение файловой системы и логической структуры диска и т.д.

В таких случаях незаменимым помощником станет специальная утилита для восстановления данных RS Partition Recovery.

Функционал программы позволяет производить быстрое восстановление удаленных файлов с жестких дисков, карт памяти, флеш-накопителей и других носителей любых типов. Для работы RS Partition Recovery используется два метода анализа диска: полный – для поиска всех возможных для восстановления данных, и быстрый – поверхностный анализ носителя для поиска информации, которая была удалена недавно. Это позволяет выбирать и использовать наиболее эффективный метод, способный вернуть DDL библиотеки, изображения, медиафайлы, компоненты программ и другую информацию независимо от расширения.

Библиотека DLL представляет собой коллекцию подпрограмм, которые могут быть вызваны на выполнение приложениями или подпрограммами из других библиотек. Подобно модулям, библиотеки DLL содержат разделяемый (sharable) код или ресурсы. Однако, в отличие от модулей, библиотеки содержат отдельно откомпилированный исполняемый код, который подключается к приложению динамически на этапе его выполнения, а не компиляции.

Для того чтобы библиотеки можно было отличить от самостоятельно выполняемых приложений, они имеют расширение .dll. Программы, написанные на Object Pascal, могут использовать библиотеки, написанные на других языках. С другой стороны, приложения Windows могут использовать библиотеки, написанные на Object Pascal.

Библиотеки могут содержать два вида подпрограмм: экспортируемые и внутренние. Экспортируемые подпрограммы могут вызываться процессом, подключающим библиотеку, а внутренние могут быть вызваны только внутри библиотеки.

Библиотека загружается в адресное пространство процесса, который ее вызвал. Подпрограммы библиотеки также используют стековое пространство процесса и его динамическую память.

Преимущества использования динамических библиотек (по сравнению со статическим подключением подпрограмм на этапе сборки приложения) следующие:

1 Процессы, которые загрузили библиотеку по одному и тому же базовому адресу, пользуются одной копией их кода, но имеют свои собственные копии данных. Благодаря этому снижаются требования к объему памяти и снижается своппинг.

2 Модификация подпрограмм библиотек не требует повторной компиляции приложений до тех пор, пока остается неизменным формат их вызова.

3 Библиотеки обеспечивают также послепродажную поддержку (after-market support). Например, дисплейный драйвер, предоставляемый библиотекой, может быть обновлен для того, чтобы поддерживать дисплей, который не существовал в момент продажи приложения.

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

Интерфейс прикладных программ (Microsoft Win32 application programming interface – API) реализован как набор DLL–библиотек.

Вызов подпрограмм из библиотек DLL.

Прежде чем программа сможет вызвать из библиотеки подпрограмму, ее необходимо импортировать. Сделать это можно двумя путями: объявить подпрограмму с директивой external или использовать прямой вызов с помощью Windows API. При этом в любом случае подпрограмма подключается к приложению только на этапе выполнения приложения. Из этого также следует, что на этапе компиляции нет проверки корректности вызова подпрограммы.

Необходимо отметить, что Object Pascal не поддерживает импорт переменных из DLL.

Статическая загрузка подпрограмм.

Простейший способ импорта подпрограммы из библиотеки состоит в объявлении ее с помощью директивы external, например

procedure DoSomething; external 'MyLib.dll';

function MessageBox(HWnd: Integer; Text, Caption: PChar; Flags: Integer):
Integer; stdcall; external 'user32.dll' name 'MessageBoxA';

// MessageBoxA – 'настоящее' имя функции в библиотеке

Если включить эти объявления в программу, библиотеки MyLib.dll и user32.dll будет загружена в память при запуске программы на выполнение. В течение всего времени выполнения программы идентификатор DoSomething или MessageBox будет ссылаться на одну и ту же точку входа в той же библиотеке.

Объявления импортируемых подпрограмм можно поместить непосредственно в программу или модуль, которые их используют. Вместе с тем использование библиотечных подпрограмм можно упростить, если собрать их объявления в отдельном модуле, который бы содержал также описания, необходимые для использования подпрограмм из библиотек. Примером может служить модуль Windows, предоставляющий доступ к функциям Windows API. Другие модули теперь будут просто подключать модуль импорта и вызывать необходимые подпрограммы обычным путем.

Пример использования статической библиотеки (полный текст см. в проекте UseDll):

Function Max(a,b:integer):integer; external 'MyDll.dll';

Function Min(a,b:integer):integer; external 'MyDll.dll';

Динамическая загрузка библиотек.

Приложение может самостоятельно загружать и выгружать библиотеки и получать доступ к их подпрограммам с использованием функции GetProcAddress. Для целей загрузки и выгрузки библиотек предназначены подпрограммы LoadLibrary и FreeLibrary. Пример их использования (полный пример см. в проекте UseDll_2):

const DllName = 'MyDll.dll'; //можно указать 'MyDll'

Procedure FormCreate ( Sender : TObject);

Procedure FormClose ( Sender: TObject; var Action: TCloseAction);

MyHandle : integer; для получения результата выполнения функции

Тип TFunction необходим для того, чтобы воспользоваться функцией

GetProcAddress для получения адреса необходимой функции из библиотеки>

TFunction = Function (a,b:integer) : integer;

Procedure TForm1.FormCreate ( Sender : TObject );

MyHandle := LoadLibrary ( DllName );

if MyHandle = 0 then

ShowMessage('Ошибка при загрузке библиотеки ' + DllName);

if (@FMax=nil) or (@FMin=nil) then

ShowMessage('Не найдены необходимые функции в библиотеке ' + DllName);

теперь подпрограммы можно вызывать используя имена FMax и FMin>

Procedure TForm1.FormClose( Sender : TObject; var Action: TCloseAction);

Выгружаем библиотеку из памяти>

В этом способе использования библиотеки ее загрузка в память не выполняется до вызова функции LoadLibrary, что позволяет экономить память. Кроме того, в этом случае можно выполнять программу даже в том случае, если какие-либо библиотеки не найдены (если, разумеется, в этом есть какой-либо смысл). Чтобы получить более подпробную информацию об ошибке, надо использовать функцию GetLastError.

Поиск загружаемой библиотеки, если ее имя не содержит пути, выполняется по следующим маршрутам (см. Help для функции LoadLibrary):

1 В каталоге, из которого было запущено приложение.

2 В текущем каталоге.

3 В каталоге System (Windows 95) или в каталоге System32 (Windows NT). Для получения пути к этому каталогу можно использовать функцию GetSystemDirectory.

4 Для Windows NT: в каталоге SYSTEM (16-битная версия).

5 В каталоге Windows. Для получения пути к этому каталогу можно использовать функцию GetWindowsDirectory.

6 В каталогах, перечисленных в переменной окружения PATH.

При попытке повторной загрузки библиотеки ошибки не происходит и библиотека не загружается.

В любой момент временибиблиотеку можно выгрузить с помощью процедуры FreeLibrary.

Решение проблем совместимости приложений.

Введение

Одним из самых важных новшеств в Microsoft® Windows® XP стало добавление целого ряда технологий совместимости приложений, доступных даже конечным пользователям через оболочку Windows XP. Распространение исправлений совместимости приложений на большом количестве компьютеров может быть трудным или невыполнимым, если оно предоставлено каждому пользователю компьютера. К счастью, есть более простой способ собирать группы исправлений совместимости и распределять их путем автоматической установки на компьютеры, работающие под управлением Windows XP.

Администратор совместимости

После установки группы необходимых исправлений совместимости, Вы можете воспользоваться Администратором совместимости, чтобы скомпоновать исправления совместимости для распространения на других компьютерах, работающих под управлением Windows XP.

Создание собственных оболочек совместимости с помощью Администратора совместимости

В этом разделе обсуждается как можно создавать и подготавливать файлы собственной базы данных с помощью Администратора совместимости, для поддержания множества приложений на одном или нескольких компьютерах, работающих под управлением Windows XP.

Администратор совместимости может компоновать исправления и оболочки совместимости для множества приложений в один файл базы данных совместимости (*.sdb), который потом может быть перенесен на другие компьютеры, работающие под управлением Windows XP. Это особенно полезно в большом сетевом окружении, где несколько человек должны обеспечивать поддержку программного обеспечения огромному числу пользователей.

Установка Администратора совместимости

Администратор совместимости, поставляемый с операционной системой Windows XP, может быть найден в папке Support Tools на установочном компакт-диске. Администратор совместимости распространяется как часть Пакета средств обеспечения совместимости приложений (Application Compatibility Toolkit) версии 2.0 и выше.

Для установки Пакета средств обеспечения совместимости приложений (Application Compatibility Toolkit) в Вашей ОС Windows XP:

  1. Вставьте установочный компакт-диск Windows XP в привод компакт-дисков
  2. Используя Мой компьютер ( My Computer ) или Проводник ( Windows Explorer), перейдите на привод, в который Вы вставили диск с ОС Windows XP, и откройте папку Support Tools.
  3. Щелкните дважды файл ACT. EXE для начала установки программы. Примите настройки, предложенные по умолчанию программой установки.

После установки Пакета средств обеспечения совместимости приложений (Application Compatibility Toolkit) его можно будет найти в меню Пуск. Администратор совместимости находится в группе Пакета средств обеспечения совместимости приложений (Application Compatibility Toolkit) в меню Пуск.

Использование Администратора совместимости

Windows XP содержит информацию о распространенных проблемах совместимости, которые могут происходить с некоторыми приложениями. Исправления совместимости приложений, предоставляемые Microsoft в Windows XP, созданы, чтобы помочь Windows XP должным образом поддерживать нормальную работу этих приложений, не ставя при этом под угрозу стабильность системы.

  • Антивирусные программы
  • Программы, которые требуют доступа на уровне ядра операционной системы
  • Программы, которые устанавливают специфические драйверы файловой системы

Причины неправильной работы приложений
Приложения, которые были созданы для работы с предыдущими версиями Windows, могут неправильно работать в ОС Windows XP Professional. Причины, по которым это может происходить:

  • Приложение не запускается, когда Windows сообщает ему о новой версии операционной системы. Зачастую приложение работает нормально, если пользователь сможет обойти этот момент.
  • Приложение обращается к старым версиям функций Win32 API, которые возвращают непредсказуемые значения на компьютерах с большим количеством ресурсов, таких как дисковое пространство
  • Приложение ожидает старых форматов данных Windows.
  • Приложение ожидает, что информация пользователя, такая как личные и временные папки, будет в определенном месте или в определенном формате.

Для устранения этих проблем с помощью Администратора совместимости Вам необходимо создать собственную базу данных, содержащую информацию об исправлениях совместимости, необходимую Вашим приложениям, а также информацию о соответствии файлов, которая позволяет Windows XP однозначно распознать приложение, требующее поддержки.

Создание собственной базы данных совместимости

Администратор совместимости позволяет Вам просматривать исправления совместимости приложений, хранящиеся в защищенных системой базах данных, чтобы применять нужные исправления для сотен приложений. Основной интерфейс Администратора позволяет контролировать приложения с исправлениями совместимости путем просмотра их в базе данных ОС Windows XP Professional. Эта информация отображается в верхней левой части (части системной базы данных) окна Администратора совместимости.

Системная база данных совместимости является составляющей операционной системы Windows XP Professional, обеспечивающей идеальную совместимость для сотен Windows-приложений. Эта база данных и соответствующие компоненты защищены операционной системой.

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

Чтобы создать новую собственную базу данных с помощью Администратора совместимости:

  1. Откройте Администратор совместимости выбрав в меню Пуск ( Start), Программы( All Programs), Пакет средств обеспечения совместимости приложений (Application Compatibility Toolkit), Администратор совместимости
  2. Если у Вас открыта собственная база данных, в меню Файл ( File) выберите Новый ( New).
  3. Зайдите в меню База данных ( Database) и нажмите Изменить название базы данных ( Change Database Name ). Как только Вы измените название базы данных, оно будет отображаться в заголовке собственной базы данных. Если пункт менюИзменить имя базы данных ( Change Database Name ) не активен, щелкните по области базы данных окна.
  4. В меню Файл ( File) нажмите Сохранить ( Save) и дайте название своему .sdb файлу. Теперь можно добавить исправления в Вашу собственную базу данных.

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

Для добавления оболочки совместимости

Тот же процесс может быть использован для добавления индивидуальных исправлений совместимости в собственную базу данных, за исключением того, что в окне Создать исправление приложения ( Create an Application Fix ) Вы должны выбрать вариантПрименить определенное исправление совместимости ( Apply Specific Compatibility Fix ). Как только все исправления и оболочки будут добавлены в базу данных, сохраните базу данных и проверьте приложение.
Совпадение имен файлов

Применение собственной базы данных к системе

Как только Вы создали Вашу собственную базу данных исправлений совместимости приложений, она должна быть применена к системе компьютера, на котором это приложение будет работать. Общий процесс развертывания исправлений совместимости на нескольких компьютерах под управлением Windows XP включает следующие действия:

  • Определите и проверьте исправления для необходимых приложений.
  • Создайте файл выборочной базы данных с нужными исправлениями.
  • Перенесите .sdb файл на нужные компьютеры под управлением Windows XP.
  • Используйте команду SDBINST.EXE, чтобы зарегистрировать базу данных. Она автоматически установит и добавит информацию об исправлениях в реестр на выбранных компьютерах.

Перенос файла собственной базы данных на другие компьютеры под управлением Windows XP
Перенос файла собственной базы данных на другие компьютеры под управлением Windows XP может быть проведена разными способами:

  • Можно поместить файл базы данных в программу установки и распространить его с помощью Групповой политики в сети с Active Directory, но это требует дополнительной работы.
  • Файл может быть скопирован вручную на каждый удаленный компьютер, или это можно сделать с помощью сценария входа в систему.
  • Еще одной возможностью является размещение файла .sdb на общем сетевом ресурсе, к которому имеют доступ все пользователи Windows XP.

В этой статье описывается, что такое динамическая библиотека ссылок (DLL) и различные проблемы, которые могут возникнуть при использовании DLLs. В нем также описаны некоторые сложные проблемы, которые следует учитывать при разработке собственных DLLs.

Применяется к: Windows 10 — все выпуски
Исходный номер КБ: 815065

Сводка

В описании того, что такое DLL, в этой статье описываются методы динамической связи, зависимости от DLL, точки входа DLL, экспорт функций DLL и средства устранения неполадок DLL.

Для Windows операционных систем большая часть функций операционной системы предоставляется DLL. Кроме того, при запуске программы на одной из Windows операционных систем большая часть функций программы может быть предоставлена DLLs. Например, некоторые программы могут содержать много различных модулей, и каждый модуль программы содержится и распространяется в DLLs.

Использование DLLs способствует модульизации кода, повторному использованию кода, эффективному использованию памяти и уменьшению дискового пространства. Таким образом, операционная система и программы загружаются быстрее, работают быстрее и меньше места на диске на компьютере.

Если программа использует DLL, проблема, называемая зависимостью, может привести к тому, что программа не будет работать. Когда программа использует DLL, создается зависимость. Если другая программа переописает и нарушает эту зависимость, оригинальная программа может не успешно выполниться.

Дополнительная информация

DLL — это библиотека, которая содержит код и данные, которые могут использоваться одновременно более чем одной программой. Например, в Windows операционных системах DLL Comdlg32 выполняет общие функции, связанные с диалоговое окно. Каждая программа может использовать функции, содержащиеся в этом DLL, для реализации открытого диалоговое окно. Это способствует повторному использованию кода и эффективному использованию памяти.

С помощью DLL программа может быть модульной в отдельные компоненты. Например, программа бухгалтерского учета может быть продана модулем. Каждый модуль может быть загружен в основную программу во время запуска, если этот модуль установлен. Поскольку модули являются отдельными, время загрузки программы быстрее. Модуль загружается только при запросе этой функции.

Кроме того, обновления легче применять к каждому модуле, не затрагивая другие части программы. Например, у вас может быть программа заработной платы, и налоговые ставки меняются каждый год. Если эти изменения изолированы в DLL, вы можете применить обновление, не нуждаясь в сборке или установке всей программы снова.

В следующем списке описываются некоторые файлы, реализованные как DLLs в Windows операционных системах:

ActiveX Файлы элементов управления (.ocx)

Пример управления ActiveX — это управление календарем, которое позволяет выбрать дату из календаря.

Файлы панели управления (.cpl)

Примером файла .cpl является элемент, расположенный в панели управления. Каждый элемент — это специализированная DLL.

Файлы драйвера устройства (drv)

Пример драйвера устройства — это драйвер принтера, который управляет печатью на принтере.

Преимущества DLL

В следующем списке описываются некоторые преимущества, которые предоставляются при помощи программы DLL:

Использует меньше ресурсов

Если несколько программ используют ту же библиотеку функций, DLL может уменьшить дублирование кода, загружаемого на диск и в физической памяти. Это может значительно повлиять на производительность не только программы, запущенной на переднем плане, но и других программ, работающих на Windows операционной системе.

Продвигает модульную архитектуру

DLL помогает развивать модульные программы. Это помогает разрабатывать крупные программы, которые требуют нескольких языковых версий или программы, которая требует модульной архитектуры. Пример модульной программы — это программа учета, которая имеет множество модулей, которые можно динамически загрузить во время запуска.

Облегчает развертывание и установку

Если функции в DLL требуется обновление или исправление, развертывание и установка DLL не требуют повторной связи программы с DLL. Кроме того, если несколько программ используют один и тот же DLL, все эти программы будут получать выгоду от обновления или исправления. Эта проблема может возникать чаще при использовании стороннее DLL, регулярно обновляемого или исправленного.

Зависимости от DLL

Когда программа или DLL используют функцию DLL в другой DLL, создается зависимость. Программа больше не является самостоятельной, и в случае слома зависимости у нее могут возникнуть проблемы. Например, программа не может работать, если происходит одно из следующих действий:

  • Зависимая DLL обновляется до новой версии.
  • Фиксирована зависимая DLL.
  • Зависимая DLL перезаписана более ранней версией.
  • Зависимая DLL удаляется с компьютера.

Эти действия называются конфликтами DLL. Если обратная совместимость не обеспечивается, программа может не успешно выполняться.

В следующем списке описываются изменения, внесенные в Windows 2000 г. и в более поздних Windows операционных системах, чтобы свести к минимуму проблемы зависимости:

Windows Защита файлов

В Windows защиты файлов операционная система предотвращает обновление или удаление системных DLLs несанкционированным агентом. Когда установка программы попытается удалить или обновить DLL, определяемую как система DLL, Windows файловой защиты будет искать допустимую цифровую подпись.

Частные DLLs позволяет изолировать программу от изменений, внесенных в общие DLLs. Частные DLLs используют сведения, определенные для версии, или пустой файл, чтобы обеспечить выполнение версии .local DLL, используемой программой. Чтобы использовать частные DLLs, найдите DLLs в корневой папке программы. Затем для новых программ добавьте сведения о версии в DLL. Для старых программ используйте пустой .local файл. Каждый метод сообщает операционной системе использовать частные DLLs, расположенные в корневой папке программы.

Средства устранения неполадок DLL

Для устранения неполадок DLL доступны несколько средств. Вот некоторые из этих средств.

Уокер зависимостей

Средство Уокер зависимостей может повторно сканировать все зависимые DLLs, используемые программой. При открываемой программе в "Уолкер зависимостей" уолкер зависимостей делает следующие проверки:

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

С помощью Уолкера зависимостей можно документировать все DLLs, которые использует программа. Это может помочь предотвратить и устранить проблемы DLL, которые могут возникнуть в будущем. В следующем каталоге при установке Visual Studio 6.0 расположено приложение Dependency Walker.

drive\Program Files\Microsoft Visual Studio\Common\Tools

Универсальное решение проблем DLL

Средство универсального решения проблем DLL (DUPS) используется для аудита, сравнения, документа и отображения данных DLL. В следующем списке описываются утилиты, которые составляют средство DUPS:

Эта утилита регистрирует все DLLs на компьютере и регистрирует сведения в текстовом файле или файле базы данных.

Эта утилита сравнивает DLLs, перечисленные в двух текстовых файлах, и создает третий текстовый файл, содержащий различия.

Эта утилита загружает текстовые файлы, созданные с помощью Dlister.exe и Dcomp.exe в базу данных dllHell.

Эта утилита предоставляет графический пользовательский интерфейс (GUI) версии Dtxt2DB.exe утилиты.

База данных справки DLL

База данных справки по DLL поможет вам найти конкретные версии DLLs, установленные программным обеспечением Майкрософт.

Разработка DLL

В этом разделе описываются проблемы и требования, которые следует учитывать при разработке собственных DLLs.

Типы DLLs

При загрузке DLL в приложении два метода связывания разрешат вызывать экспортируемую функцию DLL. Два метода связывания — динамическая привязка во время нагрузки и динамическая связь во время работы.

Динамическая привязка по времени нагрузки

В динамической привязке времени нагрузки приложение делает явные вызовы для экспортируемой DLL-функций, таких как локальные функции. Чтобы использовать динамическое связывание во время нагрузки, при компиляции и ссылке приложения предостережете файл (.h) и файл импортной библиотеки (.lib). При этом linker предоставит системе сведения, необходимые для загрузки DLL и решения экспортируемой точки функции DLL во время нагрузки.

Динамическая привязка по времени

При динамической привязке во время работы приложение вызывает функцию или функцию для загрузки LoadLibrary LoadLibraryEx DLL во время запуска. После успешной загрузки DLL вы используете функцию для получения адреса экспортируемой функции GetProcAddress DLL, которую необходимо вызвать. При использовании динамической привязки во время запуска не требуется файл библиотеки импорта.

В следующем списке описываются критерии применения для использования динамической привязки во время нагрузки и использования динамической привязки по времени.

Если важна начальная производительность запуска приложения, необходимо использовать динамическую привязку к времени выполнения.

В динамических связях с нагрузкой экспортные функции DLL похожи на локальные функции. Это упрощает вызов этих функций.

При динамической привязке во время работы приложение может ветвь для загрузки различных модулей по мере необходимости. Это важно при разработке многоязычных версий.

Точка входа в DLL

При создании DLL можно дополнительно указать функцию точки входа. Функция точки входа называется, когда процессы или потоки присоединяются к DLL или отсоединяются от DLL. Функцию точки входа можно использовать для инициализации структур данных или для уничтожения структур данных, как того требует DLL. Кроме того, если приложение многопоточное, можно использовать локальное хранилище потоков (TLS) для выделения памяти, которая является закрытой для каждого потока в функции точки входа. Следующий код является примером функции точки входа DLL.

Когда функция точки входа возвращает значение FALSE, приложение не будет запускаться, если вы используете динамическую привязку по времени нагрузки. Если используется динамическая привязка по времени запуска, загрузка только отдельной DLL не будет.

Функция точки входа должна выполнять только простые задачи инициализации и не должна вызывать другие функции загрузки или завершения DLL. Например, в функции точки входа не следует прямо или косвенно вызывать функцию LoadLibrary или LoadLibraryEx функцию. Кроме того, не следует вызывать FreeLibrary функцию, когда процесс завершается.

В многопотоковых приложениях убедитесь, что доступ к глобальным данным DLL синхронизирован (безопасный поток), чтобы избежать возможного повреждения данных. Для этого используйте TLS для предоставления уникальных данных для каждого потока.

Экспорт функций DLL

Чтобы экспортировать функции DLL, можно добавить ключевое слово функции в экспортируемую функцию DLL или создать файл определения модуля (.def), в который перечислены экспортные функции DLL.

Чтобы использовать ключевое слово функции, необходимо объявить каждую функцию, которую необходимо экспортировать со следующим ключевым словом:
__declspec(dllexport)

Чтобы использовать экспортируемые функции DLL в приложении, необходимо объявить каждую функцию, которую необходимо импортировать по следующему ключевому слову: __declspec(dllimport)

Как правило, для раздельного экспортного утверждения и утверждения используется один файл загона, в который имеется определенное заявление и ifdef import заявление.

Вы также можете использовать файл определения модуля для объявления экспортных функций DLL. При использовании файла определения модуля не нужно добавлять ключевое слово функции к экспортируемой функции DLL. В файле определения модуля объявляется заявление и LIBRARY EXPORTS утверждение для DLL. Следующий код — пример файла определения.

Пример DLL и приложения

В Visual C++ 6.0 можно создать DLL, выбрав тип проекта Win32 Dynamic-Link Library или тип MFC AppWizard (dll).

Следующий код — пример DLL, созданного в Visual C++ с помощью типа проекта Win32 Dynamic-Link Library.

Следующий код — пример проекта приложения Win32, который вызывает экспортируемую функцию DLL в DLL SampleDLL.

При динамической привязке во время нагрузки необходимо связать импортную библиотеку SampleDLL.lib, созданную при создании проекта SampleDLL.

При динамической привязке во время работы используется код, аналогичный следующему коду, для вызова SampleDLL.dll экспортируемой функции DLL.

При компиляции и ссылке приложения SampleDLL операционная Windows ищет DLL SampleDLL в следующих расположениях в этом порядке:

Папка Windows системы

Функция GetSystemDirectory возвращает путь к папке Windows системы.

Функция GetWindowsDirectory возвращает путь Windows папки.

Файл сборки содержит манифест сборки, метаданные типа, код промежуточного языка Microsoft (MSIL) и другие ресурсы. Манифест сборки содержит метаданные сборки, которые предоставляют всю информацию, необходимую для самостоятельного описания сборки. В манифест сборки включены следующие сведения:

  • Имя сборки
  • Сведения о версии
  • Сведения о культуре
  • Информация о сильных именах
  • Список файлов сборки
  • Тип справочной информации
  • Справочные и зависящие сведения о сборке

Код MSIL, содержащийся в сборке, не может выполняться напрямую. Вместо этого выполнение кода MSIL управляется с помощью CLR. По умолчанию при создании сборки сборка является закрытой для приложения. Для создания общей сборки необходимо назначить сборке сильное имя, а затем опубликовать сборку в кэше глобальной сборки.

В следующем списке описываются некоторые функции сборки по сравнению с функциями DLLs Win32:

При создании сборки в манифесте сборки содержатся все сведения, необходимые clR для запуска сборки. Манифест сборки содержит список зависимых сборок. Таким образом, CLR может поддерживать согласованный набор сборок, используемых в приложении. В DLL Win32 невозможно поддерживать согласованность между набором DLLs, используемыми в приложении при использовании общих DLLs.

В манифесте сборки сведения о версиях записываются и применяются clR. Кроме того, политики версий могут обеспечить применение использования для конкретной версии. В DLL Win32 версия не может применяться операционной системой. Необходимо убедиться, что DLLs совместимы с обратной совместимость.

Развертывание бок о бок

Сборки поддерживают развертывание бок о бок. Одно приложение может использовать одну версию сборки, а другое приложение может использовать другую версию сборки. Начиная с Windows 2000 г. развертывание поддерживается путем размещения DLLs в папке приложения. Кроме того, Windows защита файлов предотвращает перезаписываемую или замену системных DLLs несанкционированным агентом.

Самостоятельное сдерживание и изоляция

Приложение, разработанное с помощью сборки, может быть автономным и изолированным от других приложений, работающих на компьютере. Эта функция помогает создавать установки с нулевым воздействием.

Сборка запускается под разрешениями безопасности, которые поставляются в манифесте сборки и контролируются clR.

Проверка того, что имена папок не содержат нестандартных символов.

3Установка последних обновлений для ОС Windows.

4. Отключение другого конфликтующего программного обеспечения. Некоторые фоновые процессы в ОС Windows могут вызвать ошибки в других программах и процессах. Эти конфликты могут помешать установке таких программ, как iTunes. Чтобы отключить конфликтующие процессы, настройте выборочную загрузку компьютера с помощью MSConfig.

Некоторые программы для обеспечения безопасности, выпущенные другими компаниями, невозможно отключить с помощью выборочной загрузки (MSConfig). По этой причине в процессе устранения неполадок с установкой может потребоваться отключить или даже удалить подобные программы. Если программы для обеспечения безопасности установлены и по-прежнему возникают проблемы с установкой iTunes или QuickTime для Windows, выполните действия, описанные в статье «iTunes: устранение неполадок с программным обеспечением безопасности».

Контрольные вопросы:

1) Что такое установка ПО?

Установка программного обеспечения, инсталляция — процесс установки программного обеспечения на компьютер конечного пользователя. Выполняется особой программой (пакетным менеджером), присутствующей в операционной системе.

2) Что такое программная совместимость?

Совместимостью программ (англ. program compatibility) называется способность программ к взаимодействию друг с другом, возможно, в рамках более крупного программного комплекса.

3) Что такое аппаратная совместимость?

Аппаратная (техническая) совместимость (англ. hardware compatibility) — способность одного устройства работать с узлами другого устройства. Включает в себя электромагнитную совместимость.

4) Какого типа проблемы могут возникнуть при установке ПО?

Несовместимость с другими программами, отсутствие обновлений, ошибки.

5) Какими способами можно выявить проблемы установки?

Проверка наличия доступа под учетной записью администратора, проверка того, что имена папок не содержат нестандартных символов, установка последних обновлений для ОС Windows, отключение другого конфликтующего программного обеспечения.

6) Что такое метод решения проблем совместимости – использование DLL?

Самый распространенный метод решения проблем совместимости – это использование DLL (динамически загружаемых библиотек), которые перехватывают «проблемные» вызовы системных функций. Эти библиотеки нередко называют «системными заплатками». Во многих случаях этого метода вполне достаточно для решения проблемы совместимости.

7) Что такое расширенный инструментарий обеспечения совместимости Microsoft Application Compatibility Toolkit?

Microsoft® Application Compatibility Toolkit (ACT) 5.6 позволяет разработчикам программного обеспечения, независимым поставщикам программных продуктов и ИТ-специалистам, работающим в корпоративной среде, определять степень совместимости используемых приложений с новой версией операционной системы Windows® перед выполнением ее развертывания в организации.

8) Что такое технологии создания в системе виртуальной машины?

Ниже мы рассмотрим проблемы с работой DDL файлов в самых популярных версиях операционной системы Windows, разберем почему возникают проблемы с DLL, а также предоставим способы их устранения.

Содержание:

  • Почему возникают ошибки с DLL?
  • Решение проблем с DDL файлами.
  • Недостающие компоненты C++ Runtime Library и DirectX.
  • Удаление сбойного приложения.
  • Обновление драйверов устройства.
  • Другие проблемы с DLL библиотеками.
  • Что делать если важный файл или DLL библиотека были случайно удалены?

Динамические исполняемые библиотеки (DLL) представляют собой специальные программные компоненты, которые позволяют обращаться к одному файлу сразу нескольким приложениям. Основным предназначением таких библиотек является расширение возможностей утилит и экономия места, поскольку для использования аналогичных компонентов можно иметь всего одну версию файла, которая будет делиться между другими программами.

Почему возникают ошибки с DLL?

Ошибки DLL могут возникать по самым различным причинам. Чаще всего они проявляют себя при запуске каких-либо приложений и программ. Нередки случаи, когда ошибки с DLL происходят во время запуска недавно вышедших компьютерных игр или программ.

Из-за ошибок DLL приложение может не корректно работать или вовсе не загружаться, поэтому следует ознакомиться с возможными причинами появления ошибок.

Одними из основных причин возникновения ошибок DLL является простое отсутствие библиотек , которые требуются для работы приложений. Недостающие файлы могут быть удалены самим пользователем, уничтожены вирусами или перезаписанными более старыми версиями в процессе установки программных компонентов. Помимо этого, ошибки могут возникать из-за неправильной работы драйверов , недостающего программного обеспечения таких, как NET Framework, DirectX и т.д.

Стоит отметить, ошибки DLL могут быть вызваны и более серьезными проблемами, связанными с жестким диском .

Решение проблем с DDL файлами

DLL библиотеки тесно вплетены в различные системные процессы, поэтому при повреждении некоторых из них, операционная система может попросту перестать запускаться. Если это произошло, следует прибегнуть к встроенным средствам восстановления системы . Что бы попасть в среду восстановления достаточно вставить загрузочную флешку или диск с Windows, либо автоматически попасть в среду после трех неудачных попыток загрузки .

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

Для быстрого возврата работоспособности системы пользователь может выбрать один из трех пунктов восстановления , представленных в левой части окна среды восстановления.

Если проблема кроется в некорректной работе загрузчика, рекомендуем ознакомится со способами исправления в статье «Как восстановить загрузчик Windows 10» .

Недостающие компоненты C++ Runtime Library и DirectX

Чаще всего пользователи сталкиваются с проблемой ошибок DLL, которые связаны с отсутствием необходимых компонентов C++ Runtime Library либо DirectX .

Существует два способа решения проблем с недостающими компонентами DLL. Первый и более правильный – полная переустановка сбоящего ПО. Второй – скачивание непосредственного одного компонента, вызывающего ошибку.

Ошибка msvcr100.dll – сбойный компонент в системе безопасности.

Ошибки dxgi.* , d3dx9_25.*, d3d11.*, d3dx9.*, d3dx9_43.*, xinput1_3.*, d3dx9_31.*, xinput1_2.*, d3dx9_31.*, d3dx9_34.*, d3dx9_42.*, x3daudio1_7.*, x3daudio1_6.*, xrsound.* d3dx10_43.*, d3dx9_26.*, d3dx9_30.*, d3dx9_27.*, d3dx11_43.*, d3dcompiler_43.*, d3d10.*.

Ошибка steam_api.dll – распространённая ошибка среди геймеров и пользователей магазина цифровой дистрибуции Steam. Часто возникает при установке пиратских сборок игр и взломанных клиентов Steam.

Важно: мы настоятельно не рекомендуем скачивать отдельные недостающие файлы steam_api.dll, которые можно часто встретить на просторах интернета. Это обусловлено тем, что многие злоумышленники специально распространяют зараженные файлы или шпионские утилиты под видом dll-файлов. Если такой файл попадет на компьютер пользователя, существует большая вероятность утери доступа к аккаунту.

Ошибка uplay_r1_loader.* , Uplay.exe, uplay.*, ubiorbitapi_r2_loader.* — аналогичная ошибка, как и с со Steam.

Ошибка xlive – проблемы с файлами цифрового магазина Microsoft.

Ошибка msvcrt.* , msvcr71.*, msvcrt.*, msvcp120.*, msvcp110.* x64 msvcr90.*, msvcr110.*, msvcr100.*, msvcr80.*, msvcr120.*.

Ошибка physxcudart_20.* , physxloader.* и т.д.- проблемы с файлами NVIDIA PHYSX SYSTEM.

Удаление сбойного приложения

В некоторых случаях установка компонентов может не помочь, поскольку проблема кроется в сбойной программе , использующей DLL библиотеки.

Чтобы определить сбойное приложение, необходимо:

Шаг 1. Нажимаем левой кнопкой мыши по иконке «Поиск» (изображение лупы возле кнопки «Пуск») и вводим в строку фразу «Панель управления» , после чего переходим в непосредственно сам пункт «Панель управления» .

Читайте также: