Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定处理器在32位操作系统上是否支持64位_C#_.net - Fatal编程技术网

C# 如何确定处理器在32位操作系统上是否支持64位

C# 如何确定处理器在32位操作系统上是否支持64位,c#,.net,C#,.net,目前我正在使用: ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * FROM WIN32_Processor"); ManagementObjectCollection mObject = searcher.Get(); foreach (ManagementObject obj in mObject) { var architecture = obj

目前我正在使用:

ManagementObjectSearcher searcher = 
                   new ManagementObjectSearcher("Select * FROM WIN32_Processor");
ManagementObjectCollection mObject = searcher.Get();

foreach (ManagementObject obj in mObject)
{
  var architecture = obj.GetPropertyValue("Architecture");
}
体系结构
=0

这表明0表示x86

计算机正在运行的处理器为

操作系统是Windows XP 32位

CPU-Z显示


有没有办法确定Windows XP计算机是否有支持64位的处理器?

一种简单但不简单的方法是检查注册表中的CPU,应该在
HKLM\HARDWARE\DESCRIPTION\CentralProcessor\0

差不多

var rk = Registry.LocalMachine.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
if (rk.GetValue("Identifier").ToString().IndexOf("64") > 0)
{
   // Is 64 bits
} else {
   // Is 32 bits
}

不确定这对您是否足够

一种简单但并非万无一失的方法是检查注册表中的CPU,应该在
HKLM\HARDWARE\DESCRIPTION\CentralProcessor\0

差不多

var rk = Registry.LocalMachine.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
if (rk.GetValue("Identifier").ToString().IndexOf("64") > 0)
{
   // Is 64 bits
} else {
   // Is 32 bits
}

不确定这是否足以满足您的需要这可能并不理想,但使用VC++或类似工具创建(本机)DLL并直接查询处理器的功能相对简单。然后可以从C#应用程序中删除此方法

在32位处理器(OS为32或64位)上,以下C++方法将返回<代码>真< /COD>,在64位处理器上运行,<代码> false <代码>:< /P> 然后可以从C#使用此方法,使用:


这可能并不理想,但使用VC++或类似工具创建(本机)DLL并直接查询处理器的功能相对简单。然后可以从C#应用程序中删除此方法

在32位处理器(OS为32或64位)上,以下C++方法将返回<代码>真< /COD>,在64位处理器上运行,<代码> false <代码>:< /P> 然后可以从C#使用此方法,使用:


这可以描述你所看到的。建议的解决方法是转到注册表项
HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI
,在该注册表项下将有一个具有处理器友好名称的注册表项。您可以根据友好名称是包含Intel64还是x86来推断体系结构。

这可以描述您看到的内容。建议的解决方法是转到注册表项
HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI
,在该注册表项下将有一个具有处理器友好名称的注册表项。您可以根据友好名称是包含Intel64还是x86来推断体系结构。

,但您可能需要根据需要pinvoke GetNativeSystemInfo:检查此项:-@JamesGaunt/RahulTripathi-它仍然返回32位检查此项:为什么要进行否决?前面的问题并没有解决我的问题,尽管您可能需要根据需要pinvoke GetNativeSystemInfo:检查此项:-@JamesGaunt/RahulTripathi-它仍然返回32位检查此项:为什么要否决?前面的问题没有解决我的问题注册表设置显示x86系列6型号23 Stepping 10Uhm,这是正确的,可能是因为CPU驱动程序是32位的。我想您可以从
FeatureSet
注册表项(检查LM或EM64T)中提取它,但是该项非常神秘(我还没有找到关于它的具体信息),它就在那里,因为驱动程序填充了它,所以它实际上可以隐藏32位驱动程序上的64位功能。很抱歉,这里没有太大帮助:/registry设置显示了x86 Family 6 Model 23 Stepping 10Uhm,这是对的,可能是因为CPU驱动程序是32位的。我想您可以从
FeatureSet
注册表项(检查LM或EM64T)中提取它,但是该项非常神秘(我还没有找到关于它的具体信息),它就在那里,因为驱动程序填充了它,所以它实际上可以隐藏32位驱动程序上的64位功能。很抱歉,这里没什么帮助:/
[DllImport("Test64Bit.dll")]
private static extern bool IsCPU64BitCapable();