Определить загруженные сборки

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

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

21.08.2008 19:50:44
5 ОТВЕТОВ
РЕШЕНИЕ
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);
    }
  }
}
12
21.08.2008 19:55:15

Похоже AppDomain.CurrentDomain.GetAssemblies();, сделает свое дело :)

0
21.08.2008 19:54:14

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

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

2
21.08.2008 19:55:18

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

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

Для 64-битной вам нужно использовать EnumProcessModulesEx

0
21.08.2008 20:33:38

Версия PowerShell:

[System.AppDomain]::CurrentDomain.GetAssemblies()
1
1.05.2011 08:01:48
Coolio! +1 за это
Kolob Canyon 28.10.2016 17:13:08