[背景]
早先,制作根據IE版本、操作系統版本以及處理器架構自動為用戶引導適合的介質供安裝。原想,可以將之束之高閣,此后便高枕無憂了。昨天用戶很氣憤地反映了這個現象,情緒頗為激動,甚至對目前的單位發了一通牢騷。
[問題原因]
安裝64位Windows 7操作系統,使用IE 8執行腳本navigator.cpuClass返回x86而不是x64,但IE 9執行正常。
[解決思路]
客戶端環境最終極的方法是通過腳本執行navigator.userAgent來獲取用戶更多的客戶端環境信息。通過多台計算機的測試,我們發現在操作系統版本后出現WOW64或Win64信息,因此對原有判斷腳本進行兼容性改寫,從而解決此類問題。
當然你可以通過使用插件方式讀取注冊表信息或者使用WMI進行查詢更多信息。但這顯然需要更多的安全權限。而原始的此類做法是通過簡單的通用腳本來實現的,比較更大的適用性。
相關示例代碼如下:
說明:不能為了方便只判斷數字為64,userAgent會帶有大量的版本信息。這樣去識別可能會不准確。
[延伸閱讀]
如果使用注冊表可以通過從獲取環境變量獲悉CPU處理器架構:
分支:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
鍵名:PROCESSOR_ARCHITECTURE
鍵值:AMD64、EM64T、IA64、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