Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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# 是否可以从CPU确定操作系统位?_C#_.net 3.5 - Fatal编程技术网

C# 是否可以从CPU确定操作系统位?

C# 是否可以从CPU确定操作系统位?,c#,.net-3.5,C#,.net 3.5,我正在开发的应用程序应该能够运行2个脚本中的1个,这取决于运行该应用程序的操作系统是x64还是x86 四处搜索,我发现了这条线索: 但显然,我的老板担心,最重要的答案可能不会适用于我们用户将运行的所有操作系统(XP/Vista/7)。他推荐了以下代码示例: private void GetCpuDetails(out string cpuType) { cpuType = "..."; try { usi

我正在开发的应用程序应该能够运行2个脚本中的1个,这取决于运行该应用程序的操作系统是x64还是x86

四处搜索,我发现了这条线索:

但显然,我的老板担心,最重要的答案可能不会适用于我们用户将运行的所有操作系统(XP/Vista/7)。他推荐了以下代码示例:

    private void GetCpuDetails(out string cpuType)
    {
        cpuType = "..."; 

        try
        {
            using (RegistryKey regKey = Registry.LocalMachine)
            {
                using (RegistryKey subRegKey = regKey.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"))
                {
                    if (subRegKey.GetValue("ProcessorNameString") != null)
                    {
                        cpuType = subRegKey.GetValue("ProcessorNameString").ToString();
                    }

                    subRegKey.Close();
                }
                regKey.Close();
            }
        }
        catch
        {
            cpuType = "...";
        }
    }

但是我不明白你怎么可能从CPU上确定操作系统的版本。这似乎与使用处理器体系结构的难题完全相同,因为它将基于CPU而不是操作系统获得64或32位。

不,不可能仅从CPU确定这一点。64位CPU设计用于运行32位操作系统,因此了解您拥有的CPU类型不足以了解您拥有的操作系统类型

这一点尤其正确,因为过去几年制造的几乎所有CPU都是64位的,而且这种方式已经持续了足够长的时间,现在发现32位PC仍在使用已经开始变得不寻常(而且越来越不寻常)。然而,许多PC厂商仍然预装32位Windows。我不会惊讶地发现,对于一个纯粹随机的PC样本,检查CPU类型以了解操作系统目前更可能给出错误的答案,而不是正确的答案

我见过的检测操作系统类型的最佳方法是,在这个堆栈溢出问题中,适用于C#,您已经看到了:


对于.Net 4.0之前的.Net,这是正确的方法。对于4.0及更高版本,您当然可以按照注释中所述进行检查。

否,仅从CPU无法确定这一点。64位CPU设计用于运行32位操作系统,因此了解您拥有的CPU类型不足以了解您拥有的操作系统类型

这一点尤其正确,因为过去几年制造的几乎所有CPU都是64位的,而且这种方式已经持续了足够长的时间,现在发现32位PC仍在使用已经开始变得不寻常(而且越来越不寻常)。然而,许多PC厂商仍然预装32位Windows。我不会惊讶地发现,对于一个纯粹随机的PC样本,检查CPU类型以了解操作系统目前更可能给出错误的答案,而不是正确的答案

我见过的检测操作系统类型的最佳方法是,在这个堆栈溢出问题中,适用于C#,您已经看到了:


对于.Net 4.0之前的.Net,这是正确的方法。对于4.0及更高版本,您当然可以按照注释中所述进行检查。

为什么不检查IntPtr.Size来确定您的应用程序是在x64还是x86模式下运行

如果你在WoW64上,它会误导你,但也许这在你的场景中是好的

澄清: 例如,看看安东尼金在

是否键入interop=(IntPtr.Size==8)?typeof(Foo64):typeof(Foo32)

或者在May的回复中:

(IntPtr.Size==4)?“x86”:“x64”


我已经多次使用这种方法。

为什么不检查IntPtr.Size来确定应用程序是在x64还是x86模式下运行

如果你在WoW64上,它会误导你,但也许这在你的场景中是好的

澄清: 例如,看看安东尼金在

是否键入interop=(IntPtr.Size==8)?typeof(Foo64):typeof(Foo32)

或者在May的回复中:

(IntPtr.Size==4)?“x86”:“x64”


我已经多次使用过这种方法。

我认为您可以使用
System.Environment.is64位OperatingSystem
属性,如果操作系统是64位otheriwise false,它将返回true。@Sudhakar是.NET 4.0中新增的,在.NET 3.5中不存在:抱歉,我没有看到框架标记。谢谢你的观点。>“
我们的用户将运行(XP/Vista/7)
”。你还在支持XP吗?您是否知道,它在不到6个月的时间内就将停止使用,然后Microsoft将停止所有支持,包括对关键安全问题的支持?现在是时候离开XP了。@JoelCoehoorn相信我,我对它也不感到兴奋。但是,当你在一家拥有超过10万名员工的大公司工作时,并不是每个人都能拥有最新和最好的硬件或软件。见鬼,我的老板自己还在使用XP。我想你可以使用
System.Environment.is64位OperatingSystem
属性。如果操作系统是64位的,它将返回true,否则返回false。@Sudhakar这是.NET 4.0中新增的,在.NET 3.5中不存在:抱歉,我没有看到框架标记。谢谢你的观点。>“
我们的用户将运行(XP/Vista/7)
”。你还在支持XP吗?您是否知道,它在不到6个月的时间内就将停止使用,然后Microsoft将停止所有支持,包括对关键安全问题的支持?现在是时候离开XP了。@JoelCoehoorn相信我,我对它也不感到兴奋。但是,当你在一家拥有超过10万名员工的大公司工作时,并不是每个人都能拥有最新和最好的硬件或软件。见鬼,我的老板自己还在使用XP。不幸的是,由于我们使用的是第三方库,我被迫将构建目标设置为x86,因此IntPtr.Size为4,而不管它实际运行在哪个平台上。如果它可以是任何平台,我相信这会起作用,尽管我的老板似乎对此也有问题……不幸的是,由于我们使用的第三方库,我被迫将构建目标设置为x86,因此IntPtr.Size为4,而不管它实际运行在哪个平台上。如果它可以是任何平台,我相信这会起作用,尽管我的老板似乎对此也有问题。。。