2010-08-26 18 views
5

Denedim:System.Diagnostics.Process dosyasının 32 veya 64 bit olup olmadığı nasıl belirlenir?

process.MainModule.FileName.Contains("x86") 

Ama x64 süreci için bir istisna attı:

Win32Exception: ReadProcessMemory ou isteğinin sadece bir parçası bitmiş

+1

. Gerçek soru şöyle olmalı: "ReadProcessMemory çağrısını nasıl mahvettim?" –

+1

@Hans Bu başlık hakkında soru başlığı yanıtlandığı sürece umrumda değil. Listelediğim sorun sadece başlığı cevaplamanın bir yöntemidir. –

+0

olası bir kopyası [Bir işlem nasıl bilinir 32-bit veya 64-bit programsal olarak] (http://stackoverflow.com/questions/1953377/how-to-know-a-process-is-32-bit-or -64-bit-programatik olarak) –

cevap

8

Sen P/Invoke aracılığıyla IsWow64Process çağırmanız gerekir:

[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool IsWow64Process([In] IntPtr processHandle, [Out, MarshalAs(UnmanagedType.Bool)] out bool wow64Process); 

Burada biraz daha kolay aramak yapmak için bir yardımcı var: Yanlış soruyu soruyorsunuz

public static bool Is64BitProcess(this Process process) 
{ 
    if (!Environment.Is64BitOperatingSystem) 
     return false; 

    bool isWow64Process; 
    if (!IsWow64Process(process.Handle, out isWow64Process)) 
     throw new Win32Exception(Marshal.GetLastWin32Error()); 

    return !isWow64Process; 
} 
+1

'da bulunmaz. Bu yöntem 32 bit Windows –

+1

'da başarısız olur. 32 bit Windows'ta tüm işlemler 32 bittir, bu nedenle denetime gerek yoktur. Bunu yansıtmak için Is64BitProcess'i düzenledim. –

+0

GC temizleme işlemini önlemek için Process.SafeHandle özelliğini kullanın. WinAPI çağrılırken. –

1

Ne WMI en Win32_Process veya System.Diagnostics.Process herhangi bir açık özellik sunuyor. Bir 64bit süreci %WinDir%\system32\kernel32.dll onu yüklemiş ise yüklü modüller (Process.Modules) yineleme hakkında, bir 32 bit işlemi %WinDir%\syswow64\kernel32.dll yüklenmiş olacak nasıl

(bu bir dll olduğunu her Windows süreç yükler).

NB. Bu test, elbette bir x86 işletim sistemi örneğinde başarısız olacaktır. Muhtemelen aradığınız şey büyük olasılıkla

0

Environment.Is64BitProcess'dur.

+2

Sadece arama süreci 64-bit ise, OP'nin başka bir işlem olup olmadığını öğrenmek istediğini düşünüyorum. 64-bit –

+0

@Phil: Evet, OP'nin amacının ne olduğundan emin değildim. Düşündüm ya da yorum yapabilir. –

+0

İşaret ettiğiniz bu yöntem, .NET Fx –

İlgili konular