通过代码(c#或PowerShell)获取进程的.net程序集信息(如Sysinternals process Expl

本文关键字:信息 程序集 net Sysinternals Expl process 获取 代码 PowerShell 取进程 | 更新日期: 2023-09-27 18:08:17

在Sysinternals进程资源管理器中存在一个选项卡"。网络组件"。

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

如何使用PowerShell或c#获得任何正在运行的进程的相同信息?

谢谢。

通过代码(c#或PowerShell)获取进程的.net程序集信息(如Sysinternals process Expl

看了这个答案后,我意识到也许没有简单的方法可以得到你所需要的。因此,让我们使用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使用示例:

  • 下载Microsoft.Diagnostics.Runtime nupkg文件并解包

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