2010-05-19 81 views
5

這是我的問題。確定您的應用在哪個位架構上運行的最佳方式是什麼?我想要我的應用程序讀取64位數據源(存儲在註冊表項Software \ Wow6432Node \ ODBC \ ODBC.INI \ ODBC Data Sources中),如果它的32位I想要讀取32位數據源(即從Software \ ODBC \ ODBC.INI \ ODBC數據源讀取)。我的程序如何確定它是在32位還是在64位Windows上運行?

我可能會錯過這一點,但我不想關心我的應用程序運行在哪種模式。我只是想知道操作系統是32位還是64位。

[System.Environment.OSVersion.Platform似乎並沒有爲我削減它。它在我的本地xp機器和win2k8 64位服務器上返回Win32NT(即使當我所有的項目都設置爲'任何cpu'目標時))]

+0

的重複http://stackoverflow.com/questions/266082/how-do-i-tell-if-my-應用程序運行時爲32位或64位應用程序 – 2010-05-19 16:28:28

回答

3

你應該不用擔心這個,通常情況下。在64位平臺上運行32位應用程序時,系統會自動將註冊表查詢重定向到Software\Wow6432Node

+1

要使您的應用程序運行爲32位而不考慮平臺,請將exe平臺更改爲「僅x86」。它仍然可以在x64平臺上運行,並自動重定向到Wow6432Node鍵。 – 2010-05-19 15:22:25

4

嘗試酒店Environment.Is64BitOperatingSystem。這是一個新增加的.Net 4.0,專門用於檢查操作系統的類型。

+0

謝謝,但我應該提到我只限於.net 2.0 – user48408 2010-05-19 15:39:01

2

你不應該直接閱讀Wow6432Node。使用RegistryView作爲64位應用程序運行時指定32位視圖。

+0

不幸的是'RegistryView'只能從.NET 4.0中獲得。 – Regent 2010-05-19 15:33:58

4

操作簡單,安全,架構版本無關,而不要去註冊的解決方案:

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

非常優雅! – code4life 2010-05-19 17:25:56

+0

是的,但如果它在64位機器上以32位模式運行,上面的代碼將返回false否? – user48408 2010-05-20 14:19:36

相關問題