Question

Comment puis-je déterminer tous les assemblys chargés par mon application de bureau .NET ?J'aimerais les mettre dans la zone À propos afin de pouvoir interroger les clients par téléphone pour déterminer quelle version de XYZ ils ont sur leur PC.

Ce serait bien de voir des assemblys gérés et non gérés.Je me rends compte que la liste va devenir longue, mais je prévois d'y lancer une recherche incrémentielle.

Était-ce utile?

La solution

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

Autres conseils

Soit ça, soit System.Reflection.Assembly.GetLoadedModules().

Notez que AppDomain.GetAssemblies n'itérera que les assemblys dans le actuel Domaine d'application.Il est possible qu'une application ait plus d'un AppDomain, ce qui peut ou non faire ce que vous voulez.

Version PowerShell :

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

Ressemble à AppDomain.CurrentDomain.GetAssemblies(); fera l'affaire :)

Pour toutes les DLL, y compris celles non gérées, vous pouvez appeler EnumProcessModules pour obtenir les descripteurs de module, puis utiliser GetModuleFileName pour chaque descripteur afin d'obtenir le nom.

Voir http://pinvoke.net/default.aspx/psapi.EnumProcessModules et http://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx (pinvoke.net n'a pas la signature pour cela mais c'est facile à comprendre).

Pour 64 bits, vous devez utiliser EnumProcessModulesEx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top