在運行 Exchange 2000 的前端伺服器上安裝 SQL Server 2000 後,原本正常的 CDO (Collaboration Data Objects) / CDOEX / ADSI (Active Directory Service Interfaces) 呼叫開始拋出例外,郵箱存取失敗,ADSI 操作異常,但系統表面無明顯錯誤訊息。
SQL Server 2000 安裝程式會**覆寫系統共用元件**,特別是:
msado15.dll, msda*.dll, sqloledb.dll, activeds.dll 等共用 DLL 被 SQL 安裝程式替換,版本/介面不相容。mdac_typ.exe /q /C:"dasetup /q /r"。Setup.exe /AddRemove → 選擇 **系統管理工具** → 修復/重新安裝。此過程會重新註冊 ExOLEDB、CDO、ADSI 相關 DLL。
regsvr32 "C:\Program Files\Common Files\System\ado\msado15.dll"
regsvr32 "C:\Program Files\Common Files\System\ado\msadox.dll"
regsvr32 "C:\Program Files\Common Files\System\ado\msadomd.dll"
regsvr32 "C:\Program Files\Exchsrvr\bin\exoledb.dll"
regsvr32 "C:\Windows\System32\activeds.dll"
regsvr32 "C:\Windows\System32\adsldp.dll"
regsvr32 "C:\Windows\System32\adsldpc.dll"
以系統管理員身分執行命令提示字元,逐一執行,觀察「成功」對話框。
-- 1. 簡單 ADSI 連結測試 (VBScript)
Set obj = GetObject("LDAP://RootDSE")
WScript.Echo "SchemaNamingContext: " & obj.Get("schemaNamingContext")
-- 2. CDO 郵箱存取測試
Set sess = CreateObject("MAPI.Session")
sess.Logon "", "", False, True
Set msg = sess.Outbox.Messages.Add
msg.Subject = "Test"
msg.Text = "Body"
msg.Send
sess.Logoff
**SQL Server 2000 與 Exchange 2000 共安裝於同一伺服器屬高風險配置**,核心衝突在 MDAC/COM 共用元件版本。生產環境**強烈建議角色分離**;若必須共存,嚴格控制安裝順序 (Exchange 優先)、套用最新 SP/Rollup、並準備 MDAC/Exchange 修復程序作為回滾方案。