Как определить версию используемой DLL программно?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Как определить версию используемой DLL программно?

Сообщение xchgeaxeax » 13.01.2024 17:39:55

Vapaamies писал(а):И?

https://learn.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#search-order-for-unpackaged-apps писал(а):If safe DLL search mode is enabled, then the search order is as follows:

1) DLL Redirection.
2) API sets.
3) SxS manifest redirection.
4) Loaded-module list.
5) Known DLLs.
6) Windows 11, version 21H2 (10.0; Build 22000), and later. The package dependency graph of the process. This is the application's package plus any dependencies specified as <PackageDependency> in the <Dependencies> section of the application's package manifest. Dependencies are searched in the order they appear in the manifest.
7) The folder from which the application loaded.
8) The system folder. Use the GetSystemDirectory function to retrieve the path of this folder.
9) The 16-bit system folder. There's no function that obtains the path of this folder, but it is searched.
10) The Windows folder. Use the GetWindowsDirectory function to get the path of this folder.
11) The current folder.
12) The directories that are listed in the PATH environment variable. This doesn't include the per-application path specified by the App Paths registry key. The App Paths key isn't used when computing the DLL search path.
Вам перевести?
xchgeaxeax
постоялец
 
Сообщения: 125
Зарегистрирован: 11.05.2023 03:51:40

Re: Как определить версию используемой DLL программно?

Сообщение Vapaamies » 16.01.2024 00:08:17

:shock: Раньше не заходил в эту часть документации.

Уже второй день залип, пытаясь понять смысл повторения системных путей в PATH. Похоже, что никакого другого смысла, кроме ссыкливой американской перестраховки, нет. Ну, или разработчики не договорились или не поняли друг друга, что тоже довольно обычно. А теперь оно высечено в граните — никто не посмеет менять (в том числе и по указанной чисто американской причине). Так и живем. :cry:
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 292
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург

Re: Как определить версию используемой DLL программно?

Сообщение xchgeaxeax » 16.01.2024 00:30:41

xchgeaxeax
постоялец
 
Сообщения: 125
Зарегистрирован: 11.05.2023 03:51:40

Re: Как определить версию используемой DLL программно?

Сообщение WAYFARER » 16.01.2024 09:59:11

Тут некоторые счастливчики никогда не сталкивались с таким понятием как DLL Hell в Windows.
Например, когда твой софт конфликтует с другим из за одних и тех же DLL, разных версий, но имеющих одно имя, или одной версии, но собранных разными компиляторами...
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: Как определить версию используемой DLL программно?

Сообщение Vapaamies » 17.01.2024 01:02:50

Я оказался болваном. Достаточно было убрать «повторяющиеся» пути из PATH и словить «xxx не является командой, исполняемой программой или пакетным файлом» при запуске системной команды. Так что для программ эти пути.

Вспомнил даже, что в стародавние времена уже экспериментировал с подобным, не помню уже по какому поводу, и вернул всё на место по той же причине.

WAYFARER писал(а):Тут некоторые счастливчики никогда не сталкивались с таким понятием как DLL Hell в Windows.

Причем тут это? Для него еще в XP завезли Side-by-Side (SxS). В том списке он даже прямо упоминается.
Аватара пользователя
Vapaamies
постоялец
 
Сообщения: 292
Зарегистрирован: 24.07.2012 22:37:59
Откуда: Санкт-Петербург

Re: Как определить версию используемой DLL программно?

Сообщение xchgeaxeax » 17.01.2024 01:14:40

Vapaamies писал(а):Так что для программ эти пути.

Вспомнил даже, что в стародавние времена уже экспериментировал с подобным, не помню уже по какому поводу, и вернул всё на место по той же причине.

Вот об этом я сразу и сказал
xchgeaxeax писал(а):Но подозреваю, что научить cmd.exe этим же фокусам они так и не догадались, поэтому в PATH до сих пор болтаются эти каталоги.
xchgeaxeax
постоялец
 
Сообщения: 125
Зарегистрирован: 11.05.2023 03:51:40

Re: Как определить версию используемой DLL программно?

Сообщение WAYFARER » 17.01.2024 10:12:02

Vapaamies писал(а):Причем тут это? Для него еще в XP завезли Side-by-Side (SxS). В том списке он даже прямо упоминается.

а вы почитайте как это работает. Всегда ли оно применимо?


12) The directories that are listed in the PATH environment variable. - я так думаю поиск там идет не для того что бы повторно обойти папки Windows и System32, кроме них там могут быть и другие пути, в том числе пользовательские, по которым искать dll действительно нужно.
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

Рейтинг@Mail.ru