Làm cách nào để biết ứng dụng của tôi (được biên soạn trong Visual Studio 2008 là Mọi CPU) đang chạy dưới dạng ứng dụng 32 bit hoặc 64 bit?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?
Trả lời
if (IntPtr.Size == 8)
{
// 64 bit machine
}
else if (IntPtr.Size == 4)
{
// 32 bit machine
}
tôi tìm thấy mã này từ Martijn Boven rằng hiện các trick:
public static bool Is64BitMode() {
return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8;
}
Nó có khả năng hiệu quả hơn để gọi IntPtr.Size thay vì Marshal.SizeOf (typeof (IntPtr)) – JaredPar
Tôi rất muốn đưa ra 1 để bình luận JaredPar của; đó là cách tôi sẽ làm điều đó ... –
Nếu bạn đang sử dụng .NET 4.0, đó là một lớp lót cho quá trình hiện tại:
Environment.Is64BitProcess
Tham chiếu: Environment.Is64BitProcess Property (MSDN)
Cảm ơn bạn đã đăng câu trả lời, đó là điều tuyệt vời để biết. Tôi sẽ không thay đổi câu trả lời được chấp nhận hiện tại vì câu hỏi này ban đầu về .NET 3.5 nhưng tôi cũng khuyến khích mọi người bỏ phiếu cho câu trả lời của bạn. –
mẫu mã này từ Microsoft All-In-One Mã Khung có thể trả lời câu hỏi của bạn:
Detect the process running platform in C# (CSPlatformDetector)
Các mẫu mã CSPlatformDetector hiện các nhiệm vụ sau liên quan đến phát hiện nền tảng:
- Phát hiện tên của hệ điều hành hiện tại. (ví dụ: "Microsoft Windows 7 Enterprise")
- Phát hiện phiên bản của hệ điều hành hiện tại. (ví dụ: "Microsoft Windows NT 6.1.7600.0")
- Xác định xem hệ điều hành hiện tại có phải là hệ điều hành 64 bit hay không.
- Xác định xem quy trình hiện tại có phải là quy trình 64 bit hay không.
- Xác định xem một quá trình tùy ý chạy trên hệ thống có phải là 64 bit hay không.
Nếu bạn chỉ muốn để xác định xem các tiến trình đang chạy là 64-bit quá trình, bạn có thể sử dụng Environment.Is64BitProcess tài sản đó là mới trong .NET Framework 4.
Và nếu bạn muốn phát hiện xem một ứng dụng tùy tiện chạy trên hệ thống là một quá trình 64-bit, bạn cần phải xác định bitness hệ điều hành, và nếu nó là 64-bit, gọi IsWow64Process()
với quá trình xử lý mục tiêu:
static bool Is64BitProcess(IntPtr hProcess)
{
bool flag = false;
if (Environment.Is64BitOperatingSystem)
{
// On 64-bit OS, if a process is not running under Wow64 mode,
// the process must be a 64-bit process.
flag = !(NativeMethods.IsWow64Process(hProcess, out flag) && flag);
}
return flag;
}
Có thể là một thư viện hữu ích, chỉ cần một chút overkill trong bối cảnh này :). –
Trong Net Standard, bạn có thể sử dụng System.Runtime.InteropServices.RuntimeInformation.OSArchitecture
Trình biên dịch có đóng vai trò gì không? –