【问题标题】:How to check if client computer is running a 32-bit or 64-bit OS如何检查客户端计算机是否运行 32 位或 64 位操作系统
【发布时间】:2011-08-23 02:56:15
【问题描述】:

如何检查客户端计算机是在 ASP.NET 3.5 中运行 32 位还是 64 位操作系统?

【问题讨论】:

  • 哪台电脑?您的 ASP.NET 应用程序的服务器还是用户的?
  • 大概他的意思是服务器,如果他在客户端上运行 c#,他会标记它 silverlight。
  • @JonB:其实OP提到了client计算机
  • @abatishchev 哦,对我来说太早了.. :(
  • 传输到客户端浏览器的只是html文档/Javascripts。 AFAIK,您无法通过 js 获取操作系统信息。

标签: c# .net asp.net asp.net-3.5 32bit-64bit


【解决方案1】:

没有办法可靠地确定客户端运行的是 64 位操作系统还是 32 位操作系统。如果客户端根本不是一台成熟的计算机怎么办?

在客户端不运行任何平台特定代码的情况下,您所能做的就是信任浏览器传递的用户代理字符串。某些浏览器,例如 Internet Explorer,实际上会在用户代理字符串中发送此线索。

例如,64 位 IE 将发送“Win64; x64”作为用户代理字符串的一部分,而在 64 位版本的 Windows 上运行的 32 位 IE 将发送“WOW64”作为它的一部分。

【讨论】:

    【解决方案2】:

    这应该可行:

    System.Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")
    

    还有其他原生的 Win32 API 可以确定相同的:

    http://msdn.microsoft.com/en-us/library/aa394373%28VS.85%29.aspx

    【讨论】:

    • 这将为您提供服务器端的环境,这不是 OP 所要求的。
    • +1 抵消负数 - 公平地说,在发布此答案时,问题没有具体说明,因此在问题更改之前这是一个有效的答案
    【解决方案3】:

    结帐Environment.Is64BitOperatingSystem

    如果操作系统是 64 位,则返回 true;否则为假。

    【讨论】:

    • 在不判断您回答的正确性(甚至看起来您可能是正确的)的情况下,我想说一个词的帖子很少有帮助。至少,提供参考资料等。我不是要刻薄,我只是想告诉你社区最常从答案中得到什么。
    • 这只是 .net 4 及更高版本。海报限3.5。
    【解决方案4】:

    您可以查看用户代理以了解客户端运行的操作系统/架构,但用户代理可以修改,因此不是 100% 可靠的来源。

    看看http://whatsmyuseragent.com/看看你的是什么,我的是显示WOW64:

    Mozilla/5.0(Windows NT 6.1;WOW64) AppleWebKit/534.24(KHTML,像 Gecko) Chrome/11.0.696.65 Safari/534.24

    除此之外,您可能必须在客户端上运行一些脚本来确定它是什么 - 寻找环境“PROCESSOR_ARCHITECTURE”,您再次依赖该变量存在;在潜在的沙盒环境中,浏览器(或应用)可能不希望您看到很多环境变量。

    确定OS 32/64bit架构的原因是什么?

    【讨论】:

      【解决方案5】:

      您可以尝试首先显示 ASP.NET 的服务器变量,如下所示:

             if (!IsPostBack) {
                  int loop1, loop2;
                  NameValueCollection coll;
      
                  // Load ServerVariable collection into NameValueCollection object.
                  coll = Request.ServerVariables;
                  // Get names of all keys into a string array. 
                  String[] arr1 = coll.AllKeys;
                  for (loop1 = 0; loop1 < arr1.Length; loop1++) {
                      Response.Write("Key: " + arr1[loop1] + "<br>");
                      String[] arr2 = coll.GetValues(arr1[loop1]);
                      for (loop2 = 0; loop2 < arr2.Length; loop2++) {
                          Response.Write("Value " + loop2 + ": " + Server.HtmlEncode(arr2[loop2]) + "<br>");
                      }
                  }
              }
      

      之后您可以检查 HTTP_USER_AGENT 值:

      密钥:HTTP_USER_AGENT 值 0:Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.1;WOW64;Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0。 30729;媒体中心 PC 6.0;.NET4.0C;.NET4.0E;InfoPath.2;Zune 4.7;AskTbFXTV5/5.11.3.15590)

      按照这个link,意思是:

      (Windows-On-Windows 64 位)32 位应用程序正在 64 位处理器上运行

      【讨论】:

      • 虽然不是 100% 可靠,但客户端可能会伪装/修改用户代理以在字符串中不包含 WOW64,甚至在它实际上是 32 位机器时说它是 WOW64。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 2012-08-26
      • 2019-04-04
      相关资源
      最近更新 更多