Existe um comando do windows que retorna a lista do processo 64 e 32?

5

Eu estou procurando uma solução para localizar qual processo está sendo executado em 64 e quais estão em 32 bits no meu sistema Windows Seven 64, há um comando simples do shell do Windows disponível para fazer isso ???

    
por Diogo 18.05.2011 / 21:12

4 respostas

10

Depois de pensar um pouco, percebi que o método WMIC é meio piegas. Uma maneira muito melhor de fazer isso é usar um script do PowerShell com a seguinte aparência:

[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

Se você copiar isso para um script do PowerShell, chamá-lo de process-width.ps1 e executá-lo no PowerShell, ele listará todos os processos de 32 bits seguidos pelos processos de 64 bits.

Ele faz isso verificando se um processo tem wow64.dll carregado como um módulo em seu espaço de processo. wow64.dll é a camada de emulação de 32 bits do Windows para sistemas operacionais de 64 bits. Ele só será carregado por processos de 32 bits, portanto, verificar isso é uma maneira segura de saber se um processo é de 32 bits ou não.

Isso deve funcionar muito melhor como uma solução a longo prazo.

    
por 19.05.2011 / 00:46
4
wmic process get

Listará todos os processos no sistema. Você pode passar parâmetros para obter quais são as propriedades Win32_Process do WMI. Você pode encontrar essa lista aqui:

link

Um deles pode mostrar se o processo é de 64 ou 32 bits.

e: não há uma propriedade direta, mas você pode fazer isso:

wmic process get Name, MaximumWorkingSetSize

Se o número retornado por MaximumWorkingSetSize for maior que 3096, então é definitivamente um processo de 64 bits. Na minha máquina, os processos de 64 bits terão um MaximumWorkingSetSize de 32768 (também conhecido como 32gb), enquanto os processos de 32 bits terão um MaximumWorkingSetSize de 1380, que é o tamanho ajustado do meu arquivo de permuta. De qualquer forma, a simples verificação é:

MaximumWorkingSetSize > 3096 == 64-bit
    
por 18.05.2011 / 21:22
3

Se você tiver o Visual Studio instalado, você pode simplesmente usar dumpbin.exe a partir do prompt de comando do Visual Studio para despejar os cabeçalhos executáveis:

dumpbin.exe /HEADERS file.exe

O cabeçalho da máquina será 14C para um binário x86 e 8664 para x64:

x86:

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
         14C machine (x86)

x64

File Type: EXECUTABLE IMAGE

FILE HEADER VALUES
        8664 machine (x64)
    
por 14.11.2012 / 19:40
2

É fácil, basta disparar o Gerenciador de Tarefas. O processo com * 32 é um aplicativo de 32 bits

    
por 19.05.2011 / 01:45