.net - por - Determinar conjuntos cargados
teoria de conjuntos ejercicios (5)
O eso, o System.Reflection.Assembly.GetLoadedModules ().
Tenga en cuenta que AppDomain.GetAssemblies solo iterará ensamblados en el AppDomain actual . Es posible que una aplicación tenga más de un dominio de aplicación, por lo que puede o no hacer lo que quiera.
¿Cómo puedo determinar todos los ensamblajes que mi aplicación de escritorio .NET ha cargado? Me gustaría ponerlos en el cuadro de información para que pueda consultar a los clientes por teléfono para determinar qué versión de XYZ tienen en su PC.
Sería bueno ver asambleas administradas y no administradas. Me doy cuenta de que la lista será larga, pero planeo darle una búsqueda incremental.
Para todas las DLL, incluso no administradas, puede pinvoke EnumProcessModules para obtener los identificadores de módulo y luego usar GetModuleFileName para cada manejador para obtener el nombre.
Consulte http://pinvoke.net/default.aspx/psapi.EnumProcessModules y http://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx (pinvoke.net no tiene la firma para esto, pero es fácil de entender).
Para 64 bits, necesita usar EnumProcessModulesEx
Parece AppDomain.CurrentDomain.GetAssemblies();
hará el truco :)
Versión de PowerShell:
[System.AppDomain]::CurrentDomain.GetAssemblies()
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);
}
}
}