Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

Версия PowerShell:

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

Выглядит как AppDomain.CurrentDomain.GetAssemblies(); сделаю свое дело :)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top