2008-08-06 77 views
15

由於WMI類Win32_OperatingSystem僅包含Windows Vista中的OSArchitecture,因此我很快寫了一種使用註冊表的方法來嘗試確定當前系統是32位還是64位系統。這是確定操作系統架構的好方法嗎?

private Boolean is64BitOperatingSystem() 
{ 
    RegistryKey localEnvironment = Registry.LocalMachine.OpenSubKey("SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment"); 
    String processorArchitecture = (String) localEnvironment.GetValue("PROCESSOR_ARCHITECTURE"); 

    if (processorArchitecture.Equals("x86")) { 
     return false; 
    } 
    else { 
     return true; 
    } 
} 

到目前爲止,它對我們來說非常好,但我不確定我喜歡通過註冊表瀏覽多少。這是一個非常標準的做法還是有更好的方法?

編輯:哇,這段代碼在預覽中看起來更漂亮。下一次我會考慮鏈接到一個pastebin或其他東西。

回答

6

看看雷蒙德陳氏解決方案:

How to detect programmatically whether you are running on 64-bit Windows

和這裏的PInvoke的爲.NET:

IsWow64Process (kernel32)

更新:我會再跟檢查「86」。誰在說什麼英特爾或AMD的下一個32位處理器可能被指定爲。概率很低,但這是一個風險。您應該要求操作系統通過正確的API來確定這一點,而不是通過查詢可能被認爲對外界不透明的操作系統版本/平臺特定值是什麼。問問你自己的問題,1 - 註冊表條目是否由MS正確記錄,2 - 如果它是確實提供可能值的確定列表,保證允許你作爲開發者在你是否正在運行之間做出明智的決定32位或64位。如果答案是否定的,那麼調用API的,是的,但它是一個更長的囉嗦,但它是記錄和權威。

1

只要您確定應用程序的用戶將始終能夠訪問您所需的內容,查看註冊表是完全有效的。

1

在.NET下測試64位的最簡單方法是檢查IntPtr.Size的值。

編輯:Doh!這會告訴你當前進程是否是64位的,而不是整個操作系統。抱歉!

2

在.NET下測試64位的最簡單方法是檢查IntPtr.Size的值。

我相信IntPtr.Size的值是4對於在WOW下運行的32位應用程序,不是嗎?

編輯:@編輯:是的。 :)