문제

내 .NET 데스크톱 애플리케이션이 로드한 모든 어셈블리를 어떻게 확인할 수 있나요?고객에게 전화로 문의하여 PC에 설치된 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는 다음의 어셈블리만 반복합니다. 현재의 AppDomain.응용 프로그램에 둘 이상의 AppDomain이 있을 수 있으므로 원하는 대로 작동할 수도 있고 그렇지 않을 수도 있습니다.

파워셸 버전:

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

처럼 보인다 AppDomain.CurrentDomain.GetAssemblies(); 트릭을 할 것입니다 :)

관리되지 않는 DLL을 포함한 모든 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