Сведения о вопросе

Getthesound

21:08, 22nd August, 2020

Теги

.net   winforms   dll   assemblies    

Определение Загруженных Сборок

Просмотров: 448   Ответов: 5

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

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



  Сведения об ответе

+-*/

13:25, 25th August, 2020

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


  Сведения об ответе

KOMP

22:16, 4th August, 2020

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

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


  Сведения об ответе

dump

08:19, 19th August, 2020

Версия PowerShell:

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


  Сведения об ответе

prince

11:59, 1st August, 2020

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


  Сведения об ответе

$DOLLAR

20:51, 3rd August, 2020

Для всех DLLs, включая неуправляемые, вы можете 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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться