如何確定我的.NET桌面應用程序已加載的所有程序集?我想將它們放在關於盒子的位置,以便我可以通過電話查詢客戶,以確定他們在PC上的XYZ版本。確定加載的程序集
很高興看到託管和非託管程序集。我意識到名單會變長,但我打算對它進行增量搜索。
如何確定我的.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.EnumProcessModules和http://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx(pinvoke.net沒有簽名,但很容易弄清楚)。
對於64位,你需要使用EnumProcessModulesEx
PowerShell的版本:
[System.AppDomain]::CurrentDomain.GetAssemblies()
庫里歐! +1 – 2016-10-28 17:13:08