确定加载的程序集

时间:2008-08-21 19:50:44

标签: .net winforms dll assemblies

如何确定我的.NET桌面应用程序已加载的所有程序集?我想将它们放在约框中,以便我可以通过电话查询客户,以确定他们的PC上有哪个版本的XYZ。

很高兴看到托管和非托管程序集。我意识到列表会很长,但我打算对它进行增量搜索。

5 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:2)

要么是,要么是System.Reflection.Assembly.GetLoadedModules()。

请注意,AppDomain.GetAssemblies只会迭代当前 AppDomain中的程序集。应用程序可能有多个AppDomain,因此可能会也可能不会执行您想要的操作。

答案 2 :(得分:1)

PowerShell版本:

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

答案 3 :(得分:0)

看起来AppDomain.CurrentDomain.GetAssemblies();会起作用:)

答案 4 :(得分:0)

对于包括非托管的所有DLL,您可以调用EnumProcessModules来获取模块句柄,然后为每个句柄使用GetModuleFileName来获取名称。

请参阅http://pinvoke.net/default.aspx/psapi.EnumProcessModuleshttp://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx(pinvoke.net没有此签名,但很容易理解)。

对于64位,您需要使用EnumProcessModulesEx