Определить загруженные сборки
-
09-06-2019 - |
Вопрос
Как определить все сборки, загруженные моим настольным приложением .NET?Я хотел бы поместить их в поле «О программе», чтобы иметь возможность опрашивать клиентов по телефону, чтобы определить, какая версия XYZ установлена у них на компьютере.
Было бы неплохо увидеть как управляемые, так и неуправляемые сборки.Я понимаю, что список будет длинным, но я планирую провести по нему дополнительный поиск.
Решение
using System;
using System.Reflection;
using System.Windows.Forms;
public class MyAppDomain
{
public static void Main(string[] args)
{
AppDomain ad = AppDomain.CurrentDomain;
Assembly[] loadedAssemblies = ad.GetAssemblies();
Console.WriteLine("Here are the assemblies loaded in this appdomain\n");
foreach(Assembly a in loadedAssemblies)
{
Console.WriteLine(a.FullName);
}
}
}
Другие советы
Либо так, либо System.Reflection.Assembly.GetLoadedModules().
Обратите внимание, что AppDomain.GetAssemblies будет перебирать сборки только в текущий Домен приложения.Приложение может иметь более одного домена приложения, поэтому оно может выполнять или не выполнять то, что вы хотите.
Версия PowerShell:
[System.AppDomain]::CurrentDomain.GetAssemblies()
Выглядит как AppDomain.CurrentDomain.GetAssemblies();
сделаю свое дело :)
Для всех библиотек 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.