Разрешить путь к библиотекам, используемый приложением .NET - PullRequest
3 голосов
/ 19 ноября 2011

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

Это обе ссылочные сборки (получено как AssemblyName s) и P / Invoke / DllImport ed функции (получено как просто имя dll) .


Итак, в основном я ищу содержимое этих двух методов, , где executablePath - это путь к стороннему приложению .NET, который может полностью отличаться от моей программы.

static string ResolveAssemblyPath(AssemblyName name, string executablePath)
{
    // ...
}

static string ResolveDllPath(string name, string executablePath)
{
    // ...
}

Важно, чтобы эти найденные библиотеки не выполняли никакого кода в процессе определения своего полного пути! (DllMain, moduleинициализаторы , ...)

Возможно ли это в любом случае?Нельзя угадать неправильно.

1 Ответ

1 голос
/ 20 ноября 2011

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

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

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

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