Windows Seven 64システムで64を超えて実行されているプロセスと、32ビットで実行されているプロセスを見つけるためのソリューションを探しています。これを行うために使用できる簡単なWindowsシェルコマンドがありますか?
少し考えてみたところ、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ビットオペレーティングシステム用のWindows32ビットエミュレーションレイヤーです。 32ビットプロセスによってのみロードされるため、プロセスが32ビットであるかどうかを確認するための確実な方法です。
これは、長期的な解決策としてはるかにうまく機能するはずです。
wmic process get
システム上のすべてのプロセスを一覧表示します。パラメータを渡して、WMIWin32_Processプロパティを取得できます。あなたはここでそのリストを見つけることができます:
http://msdn.Microsoft.com/en-us/library/aa394372(v = vs.85).aspx
それらの1つは、プロセスが64ビットか32ビットかを示している場合があります。
e:直接のプロパティはありませんが、次のことができます。
wmic process get Name, MaximumWorkingSetSize
MaximumWorkingSetSizeによって返される数が3096より大きい場合、それは間違いなく64ビットプロセスです。私のマシンでは、64ビットプロセスのMaximumWorkingSetSizeは32768(別名32GB)ですが、32ビットプロセスのMaximumWorkingSetSizeは1380で、これはスワップファイルの調整済みサイズです。とにかく、簡単なチェックは次のとおりです。
MaximumWorkingSetSize > 3096 == 64-bit
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)
タスクマネージャを起動するだけで簡単です。 * 32のプロセスは32ビットアプリです