Определить загруженные сборки - PullRequest
8 голосов
/ 21 августа 2008

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

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

Ответы [ 5 ]

12 голосов
/ 21 августа 2008
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);
    }
  }
}
2 голосов
/ 21 августа 2008

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

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

1 голос
/ 01 мая 2011

Версия PowerShell:

[System.AppDomain]::CurrentDomain.GetAssemblies()
0 голосов
/ 22 августа 2008

Для всех библиотек 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 августа 2008

Похоже, AppDomain.CurrentDomain.GetAssemblies(); добьется цели:)

...