如何使用JS判断操作系统为32位还是64位版本

技术:如何使用JS判断操作系统为32位还是64位版本

[背景]   

早先,制作根据IE版本、操作系统版本以及处理器架构自动为用户引导适合的介质供安装。原想,可以将之束之高阁,此后便高枕无忧了。昨天用户很气愤地反映了这个现象,情绪颇为激动,甚至对目前的单位发了一通牢骚。

        当出现问题时,作为开发人员或者技术研发人员,第一反应是尽可能从他的描述中提取有用信息,然后尽可能快地去解决,而不是尝试让用户去转移自己的环境。我们必须尽可能地尊重用户使用的环境。即便将来出现IE10、Windows 8,我们也要尽可能地去解决由于兼容性或者安全性问题导致应用无法正常使用的问题。

[问题原因]

安装64位Windows 7操作系统,使用IE 8执行脚本navigator.cpuClass返回x86而不是x64,但IE 9执行正常。

[解决思路]

客户端环境最终极的方法是通过脚本执行navigator.userAgent来获取用户更多的客户端环境信息。通过多台计算机的测试,我们发现在操作系统版本后出现WOW64或Win64信息,因此对原有判断脚本进行兼容性改写,从而解决此类问题。

当然你可以通过使用插件方式读取注册表信息或者使用WMI进行查询更多信息。但这显然需要更多的安全权限。而原始的此类做法是通过简单的通用脚本来实现的,比较更大的适用性。

相关示例代码如下:

    function getCPU()

    {

       var agent=navigator.userAgent.toLowerCase();

       if(agent.indexOf("win64")>=0||agent.indexOf("wow64")>=0) return "x64";

       return navigator.cpuClass;

    }

说明:不能为了方便只判断数字为64,userAgent会带有大量的版本信息。这样去识别可能会不准确。

[延伸阅读]

如果使用注册表可以通过从获取环境变量获悉CPU处理器架构:

分支:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

键名:PROCESSOR_ARCHITECTURE

键值:AMD64、EM64T、IA64、x86等等。

相关示例代码:

       function getCPU()

      

     var   shell    new   ActiveXObject( "Wscript.Shell");

     var value= shell.RegRead ("HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment\\PROCESSOR_ARCHITECTURE");

    

     value=value.toLowerCase();

     if(value.indexOf("64")>=0) return "x64";//amd64 ia64

     return "x86";

  }

 

 

Function X86orX64()
    'Author: Demon
    'Date: 2011/11/12
    'Website: http://demon.tw
    On Error Resume Next
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem",,48)
    
    For Each objItem in colItems
        If InStr(objItem.SystemType, "86") <> 0 Then
            X86orX64 = "x86"
        ElseIf InStr(objItem.SystemType, "64") <> 0 Then
            X86orX64 = "x64"
        Else
            X86orX64 = objItem.SystemType
        End If
    Next
    
End Function

WScript.Echo X86orX64()

 

 

判断端口是否被使用:

Set WshShell = WScript.CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("netstat -an")
Set oStdOut = oExec.StdOut
Do Until oStdOut.AtEndOfStream
strLine = oStdOut.ReadLine
If InStr(strLine, ":" & port) > 0 And InStrRev(strLine, "ESTABLISHED") > 0 Then
isOccupied = 1
Exit Do
End If
Loop

posted @ 2012-07-11 21:53  wasp  阅读(10141)  评论(0编辑  收藏  举报