5

Я ищу решение, чтобы определить, какие процессы выполняются более 64, а какие 32-разрядными в моей системе Windows Seven 64. Для этого есть простая команда оболочки Windows ???

4 ответа4

10

Подумав немного, я понял, что метод 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 - это уровень 32-битной эмуляции Windows для 64-битных операционных систем. Он будет загружен только 32-разрядными процессами, поэтому проверка его является верным способом узнать, является ли процесс 32-разрядным или нет.

Это должно работать намного лучше как долгосрочное решение.

4
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 (32 ГБ), в то время как 32-разрядные процессы будут иметь MaximumWorkingSetSize 1380, который является скорректированным размером файла подкачки. В любом случае, простая проверка:

MaximumWorkingSetSize > 3096 == 64-bit
3

Если у вас установлена Visual Studio, то вы можете просто использовать dumpbin.exe из командной строки Visual Studio для вывода исполняемых заголовков:

dumpbin.exe /HEADERS file.exe

Заголовок машины будет 14C для двоичного файла x86 и 8664 для x64:

x86:

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
         14C machine (x86)

x64

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
        8664 machine (x64)
2

Это просто, просто запустите диспетчер задач. Процесс с * 32 - 32-битное приложение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .