C#判断操作系统是32位还是64位的方法
来源:互联网 发布:cmd java无法加载主类 编辑:程序博客网 时间:2024/04/29 15:03
判断系统是否是64位的方法有很多。
对于C#来说,调用WMI是一种简单易行的方式。我们可以用Win32_Processor类里面的AddressWidth属性来表示系统的位宽。AddressWidth的值受CPU和操作系统的双重影响。
具体的值如下面的表格所示:
32bit OS64bit OS32bit CPUAddressWidth = 32N/A64bit CPUAddressWidth = 32AddressWidth = 64
可以用下面的C#代码得到AddressWidth的值
(注意需添加引用System.Management)
public static string Distinguish64or32System()
{
try
{
string addressWidth = String.Empty;
ConnectionOptions mConnOption = new ConnectionOptions();
ManagementScope mMs = new ManagementScope("////localhost", mConnOption);
ObjectQuery mQuery = new ObjectQuery("select AddressWidth from Win32_Processor");
ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(mMs, mQuery);
ManagementObjectCollection mObjectCollection = mSearcher.Get();
foreach (ManagementObject mObject in mObjectCollection)
{
addressWidth = mObject["AddressWidth"].ToString();
}
return addressWidth;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return String.Empty;
}
}最近因为要根据系统的情况来决定安装那种驱动,所以需要判断下系统是32bit,还是64bit
方法一:主要是利用getSystemWow64Directory这个函数来判断!
typedef UINT (WINAPI* GETSYSTEMWOW64DIRECTORY)(LPTSTR, UINT);
BOOL IsWow64(void)
{
#ifdef _WIN64
return FALSE;
#else
GETSYSTEMWOW64DIRECTORY getSystemWow64Directory;
HMODULE hKernel32;
TCHAR Wow64Directory[MAX_PATH];
hKernel32 = GetModuleHandle(TEXT("kernel32.dll"));
if (hKernel32 == NULL) {
//
// This shouldn't happen, but if we can't get
// kernel32's module handle then assume we are
//on x86. We won't ever install 32-bit drivers
// on 64-bit machines, we just want to catch it
// up front to give users a better error message.
//
return FALSE;
}
getSystemWow64Directory = (GETSYSTEMWOW64DIRECTORY)
GetProcAddress(hKernel32, "GetSystemWow64DirectoryW");
if (getSystemWow64Directory == NULL) {
//
// This most likely means we are running
// on Windows 2000, which didn't have this API
// and didn't have a 64-bit counterpart.
//
return FALSE;
}
if ((getSystemWow64Directory(Wow64Directory,
sizeof(Wow64Directory)/sizeof(TCHAR)) == 0) &&
(GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)) {
return FALSE;
}
//
// GetSystemWow64Directory succeeded
// so we are on a 64-bit OS.
//
return TRUE;
#endif
}方法二:主要是利用IsWow64Process
#include <windows.h> typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL); LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle("kernel32"),"IsWow64Process"); BOOL IsWow64() { BOOL bIsWow64 = FALSE; if (NULL != fnIsWow64Process) { if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64)) { // handle error } } return bIsWow64; }//判断当前进程
C# codeif (IntPtr.Size == 8)
{
// 64bit
}else if (IntPtr.Size == 4)
{
// 32bit
}正确的方法应该是这样:
BOOL IsWow64()
{
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress( GetModuleHandle("kernel32"),"IsWow64Process");
if (NULL != fnIsWow64Process)
{
fnIsWow64Process(GetCurrentProcess(),&bIsWow64);
}
return bIsWow64;
}
不是判断函数地址是否有效,而是判断输出型参数bIsWow64的值.
- C#判断操作系统是32位还是64位的方法
- C#判断操作系统是32位还是64位的方法
- C#判断操作系统是32位还是64位的方法
- C#判断操作系统是32位还是64位
- 判断当前Windows XP操作系统是32位还是64位的方法
- Weblogic 是64位还是32位的判断方法
- 判断操作系统是16位还是32位的
- 判断操作系统是16位还是32位的
- 如何判断操作系统是32位还是64位?
- 如何判断Unix操作系统是32位还是64位?
- 如何判断操作系统是32位还是64位?
- 判断linux操作系统是32位还是64位
- 判断操作系统是32位还是64位
- 判断操作系统是32位还是64位
- C++判断操作系统是32位还是64位
- 如何判断操作系统是64位还是32位
- Windows判断操作系统是32位还是64位
- 判断操作系统是32位还是64位
- 关于GUI设计的Directx灵活顶点格式
- ASCII表
- 网站公司选址
- C# Server.Transfer传值方式
- 一个后门程序开发实例--基础VC版
- C#判断操作系统是32位还是64位的方法
- LINUX下常用的头文件及说明
- 设置JVM内存
- oracle中procedure、function、sequence小结
- Core animation简介
- 如何查看进程是否在运行
- c# 压缩图像文件大小
- HibernateTemplate的常规 get 、find 等
- IBM中讲解linux中的automake过程和原理