繁体   English   中英

.NET Core System.Diagnostics.Process 和 Powershell Get-Process 缺少模块

[英].NET Core System.Diagnostics.Process and Powershell Get-Process are missing modules

我刚刚注意到 .NET 核心进程 class 的奇怪行为——也就是说,它没有列出打开的进程加载的所有模块。

我试图查看我的一款游戏,并注意到虽然 .NET Framework 和 Process Hacker 列出了游戏进程加载的 100 多个模块,但 .NET Core 的 Process class 实现和 Powershell 的 Get-Process 小程序仅列出了 5 个模块 - 游戏 exe 本身, ntdll.dll 和 3 个 wow64 库。

我当然以管理员身份运行所有这些代码,以确保权限没有任何问题。

有没有人看到这样的问题并且可能有解决方法?

.NET 我正在使用的核心版本是 3.1.402,Windows 是新安装的 Win 10 Pro,build 2004。

我将尝试 go 通过我 PC 上的所有进程来查找更多差异。

在创建控制台应用程序并遍历我的所有进程并列出它们的 .NET Core 和 .NET Fx 模块后,我找到了罪魁祸首。

  1. PowerShell 是 64 位进程,因此无法查看 32 位进程的模块(它可能在内部使用EnumProcessModules WinAPI,就像System.Diagnostics.Process一样)
  2. 由于 IIS 的一些诡计,我的 .NET Core 应用程序配置就像 .NET Fx one (Debug, AnyCPU) 变成了 64 位应用程序,并且由于上述原因,它无法访问 32 位应用程序的模块,除了一些 wow64 dll的。
  3. .NET Fx 应用程序最终是32位应用程序,所以它也是在wow64下运行的,所以它能够看到所有模块。|

问题的解决方案? EnumProcessModulesEx System.Diagnostics.Process (至少对于模块部分)并尝试使用EnumProcessModulesEx WinAPI 调用,据说它能够看到wow64.dll下的模块。 如果我会知道如何使用一个...

为 win-x86 或 do.net run -r win-x86 发布项目

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM