如何判断一个程序是 32bit 还是 64bit ?
咨詢區
Jonathan Allen
我有一個 .NET 應用程序,我覺得它現在是 32bit,但又不確定構建服務器是否真的幫我編譯成了 32bit,請問我有什么辦法可以檢測當前的程序是否是真的 32bit ?
回答區
Jaco Pretorius
你想判斷運行的應用程序是 32bit 還是 64bit 的話,方法有很多。
任務管理器
打開 windows 任務管理器,查看該進程名后面是否有 *32 字樣,如果由此字樣那就說明是 32bit應用程序,反之為 64bit。
Is64BitProcess屬性
.NET 的 Environment 類提供了一個 Is64BitProcess 屬性,你可以判斷 true/false 來獲取當前是否為 32bit/64bit 。
////?Summary://?????Gets?a?value?that?indicates?whether?the?current?process?is?a?64-bit?process.////?Returns://?????true?if?the?process?is?64-bit;?otherwise,?false.public?static?bool?Is64BitProcess{get?{?}}使用 win32 api
Win32 API 中提供了一個 IsWow64Process 方法,可以借助它實現,參考如下代碼:
[DllImport("kernel32.dll",?SetLastError?=?true,?CallingConvention?=?CallingConvention.Winapi)] [return:?MarshalAs(UnmanagedType.Bool)] public?static?extern?bool?IsWow64Process([In]?IntPtr?hProcess,[Out]?out?bool?wow64Process );接下來包裝成一個可以判斷 Process 的 IsProcess64() 方法。
public?static?bool?IsProcess64(Process?process) {if?((Environment.OSVersion.Version.Major?==?5?&&?Environment.OSVersion.Version.Minor?>=?1)?||?Environment.OSVersion.Version.Major?>=?6)?{bool?ret_val;try?{if?(!WindowsAPI.IsWow64Process(process.Handle,out?ret_val))?ret_val?=?false;}?catch?{ret_val?=?false;}if?(!ret_val?&&?IntPtr.Size?==?8)?{return?true;}?else?{return?false;}}?else?{return?false;} }使用 corflags.exe
corflags.exe 小工具可以配置和查詢 應用程序 header 部分的 CorFlags 標記 從而知道你的程序是 32bit 還是 64bit。
具體參考MSDN連接:https://docs.microsoft.com/en-us/previous-versions/dotnet/netframework-2.0/ms164699(v=vs.80)?redirectedfrom=MSDN
IntPtr.Size
可以在程序運行來之后,判斷 IntPtr.Size 的值,如何 IntPtr.Size == 4 的話,很顯然是 32bit,如何 IntPtr.Size == 8 說明當前是 64bit。
點評區
其實判斷方法有很多,看應用程序的 PE 頭是個好辦法,或者通過工具查看下進程的內存地址的長度來判斷32還是64bit。
總結
以上是生活随笔為你收集整理的如何判断一个程序是 32bit 还是 64bit ?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像处理技术(二)滤波去噪
- 下一篇: Kubernetes:全面了解 Depl