2008-08-21 2 views
8

Как определить все сборки, которые загрузило настольное приложение .NET? Я хотел бы поместить их в поле, чтобы я мог запросить клиентов по телефону, чтобы определить, какая версия XYZ у них на ПК.Определение загруженных сборок

Было бы неплохо увидеть как управляемые, так и неуправляемые сборки. Я понимаю, что этот список будет длинным, но я планирую поэтапный поиск по нему.

ответ

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

Похоже AppDomain.CurrentDomain.GetAssemblies(); будет делать трюк :)

2

Либо так, либо System.Reflection.Assembly.GetLoadedModules().

Обратите внимание, что AppDomain.GetAssemblies будет выполнять только итерации сборок в текущей AppDomain. Приложение может иметь более одного AppDomain, так что может или не может делать то, что вы хотите.

0

Для всех DLL, в том числе неуправляемых, вы можете pinvoke EnumProcessModules, чтобы получить дескрипторы модуля, а затем использовать GetModuleFileName для каждого дескриптора, чтобы получить имя.

См. http://pinvoke.net/default.aspx/psapi.EnumProcessModules и http://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx (pinvoke.net не имеет подписи для этого, но это легко понять).

Для 64 бит необходимо использовать EnumProcessModulesEx

1

PowerShell Версия:

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

Coolio! +1 для этого –

Смежные вопросы