mswinsck.ocx 放入 C:\Windows\SysWOW64 並用 regsvr32 註冊成功;WScript.CreateObject("MSWINSOCK.Winsock") 時報錯「ActiveX 元件不能創建對象」。64 位進程無法直接加載 32 位 COM 組件。mswinsck.ocx 是 32 位 ActiveX 控件,註冊在 SysWOW64 實際進入的是 32 位註冊表視圖(HKLM\Software\Wow6432Node\Classes)。預設雙擊運行的 wscript.exe 是 64 位宿主,它讀取 64 位註冊表視圖,找不到該組件的 CLSID,故創建失敗。
以管理員身份打開命令提示符,執行:
%windir%\SysWOW64\wscript.exe 你的腳本.vbs
或在腳本開頭添加自檢代碼,自動重啟為 32 位宿主:
If InStr(LCase(WScript.FullName), "syswow64") = 0 Then
CreateObject("WScript.Shell").Run "%windir%\SysWOW64\wscript.exe " & Chr(34) & WScript.ScriptFullName & Chr(34)
WScript.Quit
End If
SysWOW64 目錄下的 wscript.exe 是 32 位版本,能正確讀取 Wow6432Node 註冊表;System.Net.Sockets 或 PowerShell System.Net.Sockets.TcpClient,彻底擺脫 32 位 OCX 依賴。Demon's Blog 《64位系統VBS調用32位COM組件》
https://demon.tw/programming/64bit-vbs-32bit-com.html