如何确定 System.Diagnostics.Process 是 32 位还是 64 位?
我尝试过:
process.MainModule.FileName.Contains("x86")
但它引发了 x64 进程的异常:
Win32Exception:仅完成了 ReadProcessMemory 或 WriteProcessMemory 请求的一部分
I tried:
process.MainModule.FileName.Contains("x86")
But it threw an exception for a x64 process:
Win32Exception: Only a part of the ReadProcessMemory ou WriteProcessMemory request finished
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要通过 P/Invoke 调用 IsWow64Process:
这是一个帮助程序调用起来更容易一些:
You need to call IsWow64Process via P/Invoke:
Here's a helper to make it a bit easier to call:
WMI 的
Win32_Process
或System.Diagnostics.Process
提供任何显式属性。如何迭代加载的模块(
Process .Modules
),32位进程将加载%WinDir%\syswow64\kernel32.dll
,而64位进程将从%WinDir%\加载它system32\kernel32.dll
(这是每个 Windows 进程都会加载的一个 dll)。注意。当然,此测试在 x86 操作系统实例上会失败。
Neither WMI's
Win32_Process
orSystem.Diagnostics.Process
offer any explicit property.How about iterating through the loaded modules (
Process.Modules
), a 32bit process will have loaded%WinDir%\syswow64\kernel32.dll
while a 64bit process will have loaded it from%WinDir%\system32\kernel32.dll
(this is the one dll that every Windows process loads).NB. This test will, of course, fail on a x86 OS instance.
Environment.Is64BitProcess
可能就是您正在寻找的。Environment.Is64BitProcess
is probably what you're looking for.