ฉันกำลังมองหาวิธีการแก้ปัญหาเพื่อค้นหากระบวนการที่กำลังทำงานมากกว่า 64 และที่ใดใน 32 บิตในระบบ Windows Seven 64 ของฉันมีคำสั่ง windows shell ง่าย ๆ ที่มีให้ทำ
ฉันกำลังมองหาวิธีการแก้ปัญหาเพื่อค้นหากระบวนการที่กำลังทำงานมากกว่า 64 และที่ใดใน 32 บิตในระบบ Windows Seven 64 ของฉันมีคำสั่ง windows shell ง่าย ๆ ที่มีให้ทำ
คำตอบ:
หลังจากความคิดบางอย่างฉันก็รู้ว่าวิธีการของ 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 เป็นเลเยอร์การจำลองแบบ Windows 32 บิตสำหรับระบบปฏิบัติการ 64 บิต มันจะถูกโหลดโดยกระบวนการ 32 บิตเท่านั้นดังนั้นการตรวจสอบว่าเป็นวิธีที่แน่นอนที่จะทราบว่ากระบวนการเป็น 32 บิตหรือไม่
สิ่งนี้จะทำงานได้ดีขึ้นเป็นวิธีแก้ปัญหาระยะยาว
Get-Process | where { ($_.Modules | where { $_.FileName -match "\\wow64.dll$" }) }
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 (aka 32gb) ในขณะที่กระบวนการ 32 บิตจะมี MaximumWorkingSetSize เป็น 1380 ซึ่งเป็นขนาดที่ปรับของไฟล์ swap ไม่ว่าด้วยวิธีใดก็ตามการตรวจสอบง่าย ๆ คือ:
MaximumWorkingSetSize > 3096 == 64-bit
หากคุณติดตั้ง 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)
ง่ายมากเพียงแค่ยิง Task Manager กระบวนการที่มี * 32 คือแอป 32 บิต