Bagaimana aplikasi C # saya dapat memeriksa apakah aplikasi / proses tertentu (catatan: bukan proses saat ini) berjalan dalam mode 32-bit atau 64-bit?
Misalnya, saya mungkin ingin menanyakan proses tertentu berdasarkan nama, yaitu, 'abc.exe', atau berdasarkan nomor ID proses.
c#
process
32bit-64bit
satya
sumber
sumber
Jawaban:
Salah satu cara yang lebih menarik yang pernah saya lihat adalah ini:
Untuk mengetahui apakah proses LAIN sedang berjalan di emulator 64-bit (WOW64), gunakan kode ini:
sumber
(Environment.OSVersion.Version.Major >= 5 && Environment.OSVersion.Version.Minor >= 1)
Dan itulah mengapa Microsoft harus membuat versi kebohongan kompatibilitas shims - untuk mengatasi bug dalam kode seperti itu. Apa yang terjadi ketika Windows Vista (6.0) keluar? Dan orang-orang kemudian menjelek-jelekkan Microsoft karena membuat Windows 7 versi 6.1 daripada 7.0, itu memperbaiki begitu banyak bug aplikasi-compat.processHandle = Process.GetProcessById(process.Id).Handle;
alih-alih hanyaprocessHandle = process.Handle;
?Jika Anda menggunakan .Net 4.0, ini adalah satu baris untuk proses saat ini:
Lihat Environment.Is64BitProcessProperty (MSDN).
sumber
Is64BitProcess
? Mungkin saya dapat menggunakan apa yang dilakukannya untuk mengetahui apakah saya menjalankannya sebagai proses 64-bit.Is64BitProcess
( referensiource.microsoft.com/#mscorlib/system/environment.cs ). Namun, itu hanya pernyataan pengembalian hard-code, dikendalikan oleh simbol kompilasi.Jawaban yang dipilih salah karena tidak sesuai dengan yang diminta. Ia memeriksa apakah suatu proses adalah proses x86 yang berjalan pada x64 OS; sehingga akan mengembalikan "false" untuk proses x64 pada x64 OS atau proses x86 yang berjalan di x86 OS.
Juga, itu tidak menangani kesalahan dengan benar.
Ini metode yang lebih tepat:
sumber
Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") == "x86"
akan selalu mengembalikan nilai true untuk proses 32bit. Lebih baik digunakanSystem.Environment.Is64BitOperatingSystem
jika .NET4 didukungAnda dapat memeriksa ukuran penunjuk untuk menentukan apakah itu 32bits atau 64bits.
sumber
sumber
Ini pemeriksaan satu baris.
sumber
Saya suka menggunakan ini:
Dengan cara ini jika saya perlu mencari atau memverifikasi file, saya dapat dengan mudah menulis:
sumber
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)
alih-alih pengkodean keras `C: \ Program Files`?