回答
System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")
看到this問題。
這就是:
How to detect Windows 64-bit platform with .NET?
報價:
bool is64BitProcess = (IntPtr.Size == 8);
bool is64BitOperatingSystem = is64BitProcess || InternalCheckIsWow64();
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool IsWow64Process(
[In] IntPtr hProcess,
[Out] out bool wow64Process
);
public static bool InternalCheckIsWow64()
{
if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) ||
Environment.OSVersion.Version.Major >= 6)
{
using (Process p = Process.GetCurrentProcess())
{
bool retVal;
if (!IsWow64Process(p.Handle, out retVal))
{
return false;
}
return retVal;
}
}
else
{
return false;
}
}
Upvoted,只是因爲這是一個非常複雜的方式來做一個非常簡單的事情,我認爲這太棒了。 (也就是說,只要它永遠不會出現在我的任何生產代碼中。)'System.Environment.Is64BitOperatingSystem'將在同一行中執行相同的操作。 –
爲什麼使它變得容易,當你可以複雜它? – jDourlens
@Jarrett - 並不是每個人都可以使用.Net的更高版本來做這件事,所以有時候你會去PInvoking。 –
我有這個編碼我的一個項目(C#VS 2005)。
//DLL Imports
using System.Runtime.InteropServices;
/// <summary>
/// The function determines whether the current operating system is a
/// 64-bit operating system.
/// </summary>
/// <returns>
/// The function returns true if the operating system is 64-bit;
/// otherwise, it returns false.
/// </returns>
public static bool Is64BitOperatingSystem()
{
if (IntPtr.Size == 8) // 64-bit programs run only on Win64
{
return true;
}
else // 32-bit programs run on both 32-bit and 64-bit Windows
{
// Detect whether the current process is a 32-bit process
// running on a 64-bit system.
bool flag;
return ((DoesWin32MethodExist("kernel32.dll", "IsWow64Process") &&
IsWow64Process(GetCurrentProcess(), out flag)) && flag);
}
}
/// <summary>
/// The function determins whether a method exists in the export
/// table of a certain module.
/// </summary>
/// <param name="moduleName">The name of the module</param>
/// <param name="methodName">The name of the method</param>
/// <returns>
/// The function returns true if the method specified by methodName
/// exists in the export table of the module specified by moduleName.
/// </returns>
static bool DoesWin32MethodExist(string moduleName, string methodName)
{
IntPtr moduleHandle = GetModuleHandle(moduleName);
if (moduleHandle == IntPtr.Zero)
{
return false;
}
return (GetProcAddress(moduleHandle, methodName) != IntPtr.Zero);
}
[DllImport("kernel32.dll")]
static extern IntPtr GetCurrentProcess();
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
static extern IntPtr GetModuleHandle(string moduleName);
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr GetProcAddress(IntPtr hModule,
[MarshalAs(UnmanagedType.LPStr)]string procName);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWow64Process(IntPtr hProcess, out bool wow64Process);
public static string t2or64()
{
string t2s4;
bool os = System.Environment.Is64BitOperatingSystem;
int x = 0;
if (os == true)
{
x = 64;
}
else
{
x = 32;
}
t2s4 = Convert.ToString(x);
return t2s4;
}
您可以檢查使用IntPtr大小。 IntPtr的大小爲4 32位操作系統和8的64位操作系統
/// <summary>Is64s the bit operating system.</summary>
/// <returns></returns>
if (IntPtr.Size == 8)
// 64Bit
else
// 32bit
類型:System.Int32
一個指針的大小或在此過程中處理,以字節爲單位。該屬性的值是4在32位處理中和8在64位處理中。當您使用C#
和3210編譯器編譯代碼時,您可以通過設置/platform
開關來定義過程類型。
- 1. 如何使用c程序找到我的機器是16位還是32位或64位
- 2. 無論系統是32位還是64位,int都是32位還是64位?
- 3. 如何判斷我寫的程序是32位還是64位?
- 4. 如何檢查我的Perl安裝是32位還是64位?
- 5. 如何判斷我的cygwin安裝是32位還是64位?
- 6. 如何找到它是32位還是64位? Tomcat
- 7. 我應該在新機器上使用Eclipse 32位還是64位?
- 8. 無論系統是32位還是64位,uint均爲32位?
- 9. 如何檢測Cocoa應用程序是32位還是64位?
- 10. 如何判斷應用程序是64位還是32位?
- 11. 如何檢查Linux文件(.so)是32位還是64位從Windows機器
- 12. 使用WMI,我如何確定遠程進程是32位還是64位?
- 13. 我應該使用32位還是64位JDK?
- 14. 我應該使用Python 32位還是Python 64位
- 15. 如何檢查安裝的wxPython是32位還是64位?
- 16. 如何檢查安裝的Anaconda是32位還是64位?
- 17. 如何檢測,如果CPU是32位還是64位
- 18. 我怎麼知道gcc的版本是64位還是32位?
- 19. 在32位和64位機器中總是長64位
- 20. 是否可以使用PHP知道我的平臺是64位還是32位?
- 21. 如何確定System.Diagnostics.Process是32位還是64位?
- 22. 如何知道libpython27.a是32位還是64位?
- 23. 如何檢查WebSphere是32位還是64位?
- 24. 檢查處理器是32位還是64位
- 25. 是爲32位還是64位機器編譯的共享對象?
- 26. 如何知道安裝的jvm是32位還是64位使用javascript
- 27. 遷移C++代碼32位機器到64位機器
- 28. 如何確定我的操作系統是32位還是64位?
- 29. 如何判斷我的現有Amazon EC2實例是32位還是64位?
- 30. 如何查找我的Amazon EC2實例是32位還是64位?
可能重複[如何以編程方式確定我的處理器類型?](http://stackoverflow.com/questions/1020581/how-can-i-programmatically-determine-my-processor-type) – 2011-08-11 19:50:16
@MyrS - 根據使用哪個.Net版本,有不同的方法來執行此操作。早期的.Net平臺版本不支持Is64BitOperatingSystem()。 –