2010-05-19 26 views
5

Đây là câu hỏi của tôi. Cách tốt nhất để xác định kiến ​​trúc bit mà ứng dụng của bạn đang chạy là gì?Làm thế nào để chương trình của tôi có thể xác định được nếu nó đang chạy trên Windows 32 bit hoặc 64 bit?

Điều tôi muốn làm: Trên máy chủ 64 bit, tôi muốn ứng dụng của mình đọc nguồn dữ liệu 64 bit (được lưu trữ trong khóa reg Software \ Wow6432Node \ ODBC \ ODBC.INI \ ODBC Data Sources) và nếu 32 bit của nó tôi muốn đọc nguồn dữ liệu 32 bit, (tức là đọc từ phần mềm \ ODBC \ ODBC.INI \ ODBC nguồn dữ liệu).

Tôi có thể bị thiếu điểm, nhưng tôi không muốn quan tâm chế độ ứng dụng của mình đang chạy. Tôi chỉ muốn biết liệu hệ điều hành có 32 hay 64 bit không.

[System.Environment.OSVersion.Platform dường như không cắt nó cho tôi. Nó trở về Win32NT trên máy xp địa phương của tôi và trên máy chủ win2k8 64 bit (ngay cả khi tất cả các dự án của tôi được đặt thành 'bất kỳ cpu' nào)]

+0

Duplicate của http://stackoverflow.com/questions/266082/how-do-i-tell-if-my- application-is-running-as-a-32-hoặc-64-bit-application –

Trả lời

3

Bạn thậm chí không nên lo lắng về điều này. Hệ thống sẽ tự động chuyển hướng truy vấn đăng ký đến Software\Wow6432Node khi chạy một ứng dụng 32 bit trên nền tảng 64 bit.

+1

Để làm cho ứng dụng của bạn chạy dưới dạng 32 bit bất kể nền tảng nào, hãy thay đổi nền tảng exe thành "x86 only". Nó sẽ vẫn chạy trên các nền tảng x64 và được tự động chuyển hướng đến các khóa Wow6432Node. –

4

Hãy thử sản phẩm Environment.Is64BitOperatingSystem. Đây là một cái mới được thêm vào trong .Net 4.0 đặc biệt cho mục đích kiểm tra loại hệ điều hành.

+0

Cảm ơn nhưng tôi nên đề cập đến tôi bị giới hạn .net 2.0 – user48408

2

Bạn không nên đọc trực tiếp Wow6432Node. Sử dụng RegistryView để chỉ định chế độ xem 32 bit khi chạy dưới dạng ứng dụng 64 bit.

+0

Thật không may 'RegistryView' chỉ có sẵn từ .NET 4.0. – Regent

4

đơn giản, an toàn, phiên bản khuôn khổ giải pháp bất khả tri mà không đi đến registry:

Console.WriteLine(
    "Is 64-bit? {0}", 
    (
     System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == sizeof(Int64) 
      ? "Yes" 
      : "No" 
    ) 
); 
+0

Khá thanh lịch! – code4life

+0

Có nhưng nếu nó đang chạy ở chế độ 32 bit trên máy 64 bit thì ở trên sẽ trả về false không? – user48408

Các vấn đề liên quan