确定加载的程序集

问题描述:

如何确定我的.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); 
    } 
    } 
} 

貌似AppDomain.CurrentDomain.GetAssemblies();会做的伎俩:)

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

请注意,AppDomain.GetAssemblies将只遍历当前 AppDomain中的程序集。应用程序可能有多个AppDomain,因此可能会或可能不会做你想要的。

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

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

对于64位,你需要使用EnumProcessModulesEx

PowerShell的版本:

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

库里欧! +1 – 2016-10-28 17:13:08