Làm thế nào để biết bộ xử lý của tôi là 32 hoặc 64 bit trong C#?Làm thế nào để biết bộ vi xử lý của tôi là 32 hoặc 64 bit trong C#?
Trả lời
Bạn có thể truy vấn các lớp WMIWin32_Processor
sử dụng System.Management.ManagementObject
:
ManagementObject mo;
mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'");
ushort i = (ushort)mo["Architecture"];
switch (i)
{
case 0:
return "32 Bit";
break;
case 9:
return "64 Bit";
break;
}
Hãy xem the MSDN Library description cho mã xử lý khác.
Sự cố với điều này là người dùng đang chạy chương trình cần có đặc quyền để xem WMI.
Cách dễ nhất để natively kiểm tra trong C# là:
var size = IntPtr.Size;
kích thước sẽ tương đương với 4 hoặc 8 nhưng câu hỏi lớn là tại sao bạn cần phải biết?
Điều đó không cho bạn biết loại bộ xử lý là gì, chỉ những gì ứng dụng hiện tại đang chạy. – Guffa
Nếu bạn chỉ muốn tìm hiểu xem ứng dụng hiện có đang chạy dưới dạng ứng dụng 32 bit hay ứng dụng 64 bit, chỉ cần sử dụng thuộc tính IntPtr.Size
.
int bits = IntPtr.Size * 8;
Để tìm hiểu thông tin về bộ xử lý thực tế khó hơn. Here is a library nhận được một số thông tin, nhưng trang không cho biết liệu trang đó có nhận được thông tin cụ thể hay không. Bạn có thể get some information from the registry, tôi chưa kiểm tra xem có bao nhiêu thông tin.
Bạn cũng có thể sử dụng P/Gọi để gọi GetNativeSystemInfo và nhận cấu trúc SystemInfo.
Một giải pháp khác trông như thế này:
isWow64 = false;
if (System.Environment.OSVersion.Version.Major >= 5 &&
System.Environment.OSVersion.Version.Minor >= 1)
{
var processHandle = GetProcessHandle((uint)
System.Diagnostics.Process.GetCurrentProcess().Id);
bool retVal;
if (!NativeMethods.IsWow64Process(processHandle, out retVal))
{
throw (new Win32Exception());
}
isWow64 = retVal;
}
giải pháp thay thế (nhưng không khuyến khích) :)
public bool Is64bitOS
{
get
{
return Environment.GetEnvironmentVariable("ProgramFiles(x86)")
!= null;
}
}
public string ProgramFilesX86
{
get
{
string programFiles =
Environment.GetEnvironmentVariable("ProgramFiles(x86)");
if (programFiles == null)
{
programFiles = Environment.GetEnvironmentVariable(
"ProgramFiles");
}
return programFiles;
}
}
Query lớp Win32_Processor qua WMI
Bạn có thể lấy CPU (và thêm) thông tin từ sổ đăng ký:
HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor
Có 1 hoặc nhiều khóa con (một cho mỗi lõi) được gọi là 0, 1, 2 vv. Mỗi khóa con chứa thông tin trên lõi bao gồm Mã định danh chứa x86 hoặc 64 bit trong văn bản, bao gồm họ và mô hình xử lý.
Điều này là chính xác, nhưng chỉ trên các máy cửa sổ. Tôi không nghĩ rằng điều này sẽ làm việc cho Silverlight, điện thoại 7 ứng dụng hoặc ứng dụng chạy trên mono/linux. – matt
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo);
public static bool Is64Bit()
{
bool retVal;
IsWow64Process(Process.GetCurrentProcess().Handle, out retVal);
return retVal;
}
Có gì sai với Environment.Is64BitOperatingSystem? –
Đối với bất cứ ai sử dụng .NET 4.0 hoặc mới hơn, có một built-in hữu System.Environment.Is64BitOperatingSystem
để cung cấp cho bạn thông tin này.
- 1. 32 so với 64 bit ... hoặc, chính xác 'thông tin xử lý' có nghĩa là gì
- 2. Sự khác nhau giữa bộ xử lý 32 bit và 64 bit là gì?
- 3. Tôi nên tạo hoặc tải lên gói NuGet 32 bit và 64 bit như thế nào?
- 4. Làm cách nào để chọn giữa 32-bit hoặc 64-bit trong C# Express?
- 5. 32-bit xử lý của địa chỉ trên 64-bit Linux
- 6. Dưới C# là sử dụng Int64 trên bộ xử lý 32 bit nguy hiểm
- 7. Làm cách nào để nhận libpam.so.0 (32 bit) trên RHEL6 64 bit của tôi?
- 8. Cách chuẩn để xử lý cài đặt Python 32 bit và 64 bit song song trên máy Windows là gì?
- 9. Để học lắp ráp - tôi có nên bắt đầu với 32 bit hoặc 64 bit không?
- 10. nguyên tử trong 32/64 bit
- 11. SDK Android 32 bit hoặc 64 bit trên hệ điều hành Windows 64 bit?
- 12. Windows có thể xử lý thừa kế qua ranh giới 32 bit/64 bit không?
- 13. Ứng dụng 32 bit hoặc 64 bit trên hệ điều hành 64 bit?
- 14. Làm thế nào để biên dịch chương trình C++ thành 64-bit trên máy 64 bit?
- 15. 32 bit int * 32 bit int = 64 bit int?
- 16. Java JDK 32 bit và 64 bit
- 17. Có cách nào để kiểm tra xem quy trình là 64 bit hay 32 bit không?
- 18. Cách phát hiện tệp PE đã cho (exe hoặc dll) là 64 bit hoặc 32 bit
- 19. Máy ảo 32 hoặc 64 bit nhanh hơn trên máy 64 bit (vmware)
- 20. Làm cách nào để biết ứng dụng của tôi có đang chạy dưới dạng ứng dụng 32 bit hoặc 64 bit không?
- 21. Cách một byte bộ nhớ được truy cập bởi CPU trong bộ nhớ 32 bit và bộ xử lý 32 bit
- 22. Tôi có thể sử dụng 32 bit dll hoặc exe trong python 64 bit không?
- 23. Làm thế nào để khởi động powerhell 64 bit từ 32-bit cmd.exe?
- 24. Số lớn hơn 2^32 được xử lý bởi máy 32 bit như thế nào?
- 25. Làm cách nào để biết liệu IE của tôi là 64 bit? (Đối với vấn đề đó, Java cũng vậy?)
- 26. Sắp xếp bộ nhớ trên bộ xử lý Intel 32 bit
- 27. Phát triển trên cả bộ vi xử lý 32 bit và 64 bit, tôi nên cấu trúc dự án của mình như thế nào để tự động tham khảo các dll phải không?
- 28. bit gương của từ 32 bit
- 29. Nhập 32 bit dll trong 64 bit .Net application
- 30. Tạo 32 bit JavaFX Native Bundle trong máy 64 bit
Tôi có thể truy vấn lớp Win32_Processor (từ PowerShell) tốt mà không có quyền quản trị. Ngoài ra, bạn chỉ có thể truy vấn AddressWidth/DataWidth thay vì kiến trúc vì kiến trúc 6 (Itanium) cũng sẽ là 64 bit. Đừng cho rằng chỉ có x86 và x86_64. – Joey