如何使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM