Domanda

Come posso determinare tutti gli assembly caricati dalla mia applicazione desktop .NET?Vorrei inserirli nella casella Informazioni in modo da poter interrogare telefonicamente i clienti per determinare quale versione di XYZ hanno sul loro PC.

Sarebbe bello vedere sia assemblee gestite che non gestite.Mi rendo conto che l'elenco sarà lungo, ma ho intenzione di inserirvi una ricerca incrementale.

È stato utile?

Soluzione

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);
    }
  }
}

Altri suggerimenti

O quello o System.Reflection.Assembly.GetLoadedModules().

Tieni presente che AppDomain.GetAssemblies eseguirà l'iterazione solo degli assembly nel file attuale DominioApp.È possibile che un'applicazione abbia più di un AppDomain, quindi potrebbe o meno fare ciò che desideri.

Versione di PowerShell:

[System.AppDomain]::CurrentDomain.GetAssemblies()

Sembra AppDomain.CurrentDomain.GetAssemblies(); farà al caso tuo :)

Per tutte le DLL, incluse quelle non gestite, è possibile richiamare EnumProcessModules per ottenere gli handle del modulo e quindi utilizzare GetModuleFileName per ogni handle per ottenere il nome.

Vedere http://pinvoke.net/default.aspx/psapi.EnumProcessModules E http://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx (pinvoke.net non ha la firma per questo ma è facile da capire).

Per 64 bit è necessario utilizzare EnumProcessModulesEx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top