通过代码(c#或PowerShell)获取进程的.net程序集信息(如Sysinternals process Expl
本文关键字:信息 程序集 net Sysinternals Expl process 获取 代码 PowerShell 取进程 | 更新日期: 2023-09-27 18:08:17
在Sysinternals进程资源管理器中存在一个选项卡"。网络组件"。
此选项卡只显示在实际使用。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);
}
}
您必须使用nuget: <package id="Microsoft.Samples.Debugging.MdbgEngine" version="1.4.0.0" targetFramework="net452" />
可以使用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() }