Определение загруженных сборок

Как определить все сборки, загруженные моим настольным приложением .NET? Я хотел бы поместить их в поле «О программе», чтобы я мог опрашивать клиентов по телефону, чтобы определить, какая версия XYZ у них установлена ​​на их ПК.

Было бы неплохо увидеть как управляемые, так и неуправляемые сборки. Я понимаю, что список будет длинным, но я планирую добавить в него поэтапный поиск.


person Nick    schedule 21.08.2008    source источник


Ответы (4)


Версия PowerShell:

[System.AppDomain]::CurrentDomain.GetAssemblies()
person bernd_k    schedule 01.05.2011
comment
Кулио! +1 за это - person Kellen Stuart; 28.10.2016

Либо это, либо System.Reflection.Assembly.GetLoadedModules().

Обратите внимание, что AppDomain.GetAssemblies будет перебирать сборки только в текущем AppDomain. Приложение может иметь более одного AppDomain, поэтому оно может делать или не делать то, что вы хотите.

person TheSmurf    schedule 21.08.2008

Похоже, AppDomain.CurrentDomain.GetAssemblies(); поможет :)

person Nick    schedule 21.08.2008

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

См. http://pinvoke.net/default.aspx/psapi.EnumProcessModules и http://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx (pinvoke.net не имеет подписи для этого, но это легко понять).

Для 64-разрядной версии вам нужно использовать EnumProcessModulesEx

person denis phillips    schedule 21.08.2008