Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过代码(C#或PowerShell)获取有关进程的.NET程序集信息(如Sysinternals process Explorer)_C#_.net_Powershell_Process_Assemblies - Fatal编程技术网

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

通过代码(C#或PowerShell)获取有关进程的.NET程序集信息(如Sysinternals process Explorer),c#,.net,powershell,process,assemblies,C#,.net,Powershell,Process,Assemblies,在Sysinternals Process Explorer中存在一个选项卡“.NET程序集” 此选项卡仅显示在实际使用.NET程序集的进程的属性中 如何使用PowerShell或C#在任何正在运行的进程上获得相同的信息 谢谢。看了之后,我意识到也许没有简单的方法可以得到你需要的东西。因此,让我们使用MDBG解决您在管理的流程方面面临的挑战: _engine = new MDbgEngine(); _engine.Attach(p.Id, RuntimeEnvir

在Sysinternals Process Explorer中存在一个选项卡“.NET程序集”

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

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

谢谢。

看了之后,我意识到也许没有简单的方法可以得到你需要的东西。因此,让我们使用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);
            }

        }
您必须从以下位置使用MDBG包:
可以使用

Powershell使用示例如下:

  • 下载并解包 它需要获取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()
    }
    

检查一下,谢谢。不幸的是,这段代码似乎是为了“自我反映”一个过程。我想读取当前正在运行的其他进程的信息。好的,然后您可以使用MDBG附加到该进程并分析其程序集。但也许这是一种过激的做法,还有更简单的方法。谢谢你的投入。我使用了它,并且在某种程度上能够收集集合。对于一些进程(如Chrome),它似乎挂起。@ TimoSistiSee,正如我在回答中所说的,它只适用于.NET托管进程,而Chrome,我知道的主要是用C++编写的,而不是CLR上运行的。在Sysinternals Process Explorer中,.NET Assemblys选项卡为chrome显示了什么?@TimoSperisen为了避免犹豫,您可以尝试类似(从未测试过)的内容,谢谢链接。这个例子似乎效果更好!