通过代码(C#或PowerShell)获取有关进程的.NET程序集信息(如Sysinternals process Explorer)
在Sysinternals Process Explorer中存在一个选项卡“.NET程序集” 此选项卡仅显示在实际使用.NET程序集的进程的属性中 如何使用PowerShell或C#在任何正在运行的进程上获得相同的信息 谢谢。看了之后,我意识到也许没有简单的方法可以得到你需要的东西。因此,让我们使用MDBG解决您在管理的流程方面面临的挑战:通过代码(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
_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为了避免犹豫,您可以尝试类似(从未测试过)的内容,谢谢链接。这个例子似乎效果更好!