在Sysinternals Process Explorer中,存在一个选项卡“.NET Assemblies”。
此选项卡仅显示在实际使用.NET程序集的进程的属性中。
如何使用PowerShell或C#获取有关任何正在运行的进程的相同信息?
谢谢。
在看了this answer后,我意识到可能没有简单的方法可以得到你需要的东西。让我们一起使用MDBG来解决您对托管流程的挑战:
_engine = new MDbgEngine();
_engine.Attach(p.Id, RuntimeEnvironment.GetSystemVersion());
_engine.Processes.Active.Go().WaitOne();
foreach (MDbgAppDomain appDomain in _engine.Processes.Active.AppDomains) {
foreach (CorAssembly assembly in appDomain.CorAppDomain.Assemblies) {
Console.WriteLine(assembly.Name);
}
}
您将不得不使用nuget:<package id="Microsoft.Samples.Debugging.MdbgEngine" version="1.4.0.0" targetFramework="net452" />
的MDBG软件包
可以使用ClrMD (Microsoft.Diagnostics.Runtime)。
Powershell用法的一个例子:
[int]$targetProcessId=12345
[Reflection.Assembly]::LoadFile('.\Microsoft.Diagnostics.Runtime.dll')
$dataTarget = [Microsoft.Diagnostics.Runtime.DataTarget]::AttachToProcess($targetProcessId, 1) #AttachFlags.Noninvasive
try
{
$clrRuntime = $dataTarget.ClrVersions[0].CreateRuntime()
foreach ($domain in $clrRuntime.AppDomains) {
Write-Host "Domain ID: " $domain.Id ", Name: " $domain.Name
foreach ($clrModule in $domain.Modules) {
Write-Host "`t`t" $clrModule.Name
}
}
}
finally
{
$dataTarget.Dispose()
}