通过代码(C#或PowerShell)获取进程上的.NET程序集信息(如Sysinternals Process Explorer)

问题描述 投票:2回答:2

在Sysinternals Process Explorer中,存在一个选项卡“.NET Assemblies”。

此选项卡仅显示在实际使用.NET程序集的进程的属性中。

如何使用PowerShell或C#获取有关任何正在运行的进程的相同信息?

谢谢。

c# .net powershell process assemblies
2个回答
2
投票

在看了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软件包


0
投票

可以使用ClrMD (Microsoft.Diagnostics.Runtime)

Powershell用法的一个例子:

  • 下载Microsoft.Diagnostics.Runtime nupkg file并解压缩以获取Microsoft.Diagnostics.Runtime.dll
  • 获取目标进程的ID
  • 使用进程ID和Microsoft.Diagnostics.Runtime.dll的正确路径在下面运行脚本 [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() }
© www.soinside.com 2019 - 2024. All rights reserved.