Déterminer les assemblages chargés
-
09-06-2019 - |
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.
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