是否有一个 Windows 命令可以返回 64 和 32 进程的列表?

是否有一个 Windows 命令可以返回 64 和 32 进程的列表?

我正在寻找一个解决方案来定位在我的 Windows Seven 64 系统上哪些进程在 64 位上运行以及哪些进程在 32 位上运行,是否有一个简单的 Windows shell 命令可以做到这一点???

答案1

经过一番思考,我意识到 WMIC 方法有点不靠谱。更好的方法是使用如下所示的 PowerShell 脚本:

[System.Diagnostics.Process[]] $processes64bit = @()
[System.Diagnostics.Process[]] $processes32bit = @()

foreach($process in get-process) {
    $modules = $process.modules
    foreach($module in $modules) {
        $file = [System.IO.Path]::GetFileName($module.FileName).ToLower()
        if($file -eq "wow64.dll") {
            $processes32bit += $process
            break
        }
    }

    if(!($processes32bit -contains $process)) {
        $processes64bit += $process
    }
}

write-host "32-bit Processes:"
$processes32bit | sort-object Name | format-table Name, Id -auto

write-host ""
write-host "64-bit Processes:"
$processes64bit | sort-object Name | format-table Name, Id -auto

如果将其复制到 PowerShell 脚本中,将其命名为 process-width.ps1,然后在 PowerShell 中运行它,它将列出所有 32 位进程,然后是 64 位进程。

它通过检查进程是否将 wow64.dll 作为模块加载到其进程空间中来实现这一点。wow64.dll 是适用于 64 位操作系统的 Windows 32 位模拟层。它只会由 32 位进程加载,因此检查它是了解进程是否为 32 位的可靠方法。

作为一个长期解决方案,这应该会发挥更好的作用。

答案2

wmic process get

将列出系统上的所有进程。您可以传递参数来获取 WMI Win32_Process 属性。您可以在此处找到该列表:

http://msdn.microsoft.com/en-us/library/aa394372(v=vs.85).aspx

其中一个可能显示该进程是 64 位还是 32 位。

e:没有直接属性,但您可以执行以下操作:

wmic process get Name, MaximumWorkingSetSize

如果 MaximumWorkingSetSize 返回的数字大于 3096,那么它肯定是一个 64 位进程。在我的计算机上,64 位进程的 MaximumWorkingSetSize 为 32768(即 32gb),而 32 位进程的 MaximumWorkingSetSize 为 1380,这是我的交换文件的调整大小。无论如何,简单的检查是:

MaximumWorkingSetSize > 3096 == 64-bit

答案3

如果您安装了 Visual Studio,那么您可以简单地从 Visual Studio 命令提示符中使用 dumpbin.exe 来转储可执行头:

dumpbin.exe /HEADERS file.exe

对于 x86 二进制文件,机器头为 14C,对于 x64,机器头为 8664:

x86:

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
         14C machine (x86)

x64

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
        8664 machine (x64)

答案4

很简单,只需启动任务管理器即可。带有 *32 的进程是 32 位应用程序

在此处输入图片描述

相关内容