ADSI 和用戶帳戶控制
Windows 和 Windows Server 具有 用戶帳戶控制,這對使用 Active Directory 服務介面 (ADSI) 的應用程式有影響。 具體而言,這些介面是設計成由具有本機計算機上系統管理員許可權的使用者帳戶執行。
問題
每次應用程式連線到目錄並嘗試建立ADSI物件時, 就會檢查Active Directory 架構 是否有變更。 如果自上次連線之後已變更,則會下載架構並儲存在本機計算機上的快取中。 在 Windows Vista 之前的 Windows 版本中,此快取的預設位置為
%systemroot%\SchCache\
不過,由標準帳戶執行的應用程式(也就是非系統管理員)帳戶將無法存取此目錄,因此,使用此模式中執行 ADSI 介面的應用程式將會在每個連線上下載架構,這會影響輸送量和效能。
方案
單一使用者 - 若要解決此問題,有新的 ADSI 提供者登錄控制機碼可決定快取 Active Directory 架構 物件的登錄位置和檔案位置。 如果登錄機碼
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\adsi\Cache\PerMachine
設定為 0 (零),每個用戶都會有不同的 ADSI 儲存位置;登錄機碼將會儲存在
HKEY_CURRENT_USER\Software\Microsoft\ADs\Providers\LDAP\
和快取檔案將會儲存在
%LOCALAPPDATA%\Microsoft\Windows\SchCache
這些設定是執行 Windows Server 2008 或 Windows Vista 之電腦上的預設設定。
多使用者 - 如果您在具有許多使用者帳戶的計算機上執行 ADSI 應用程式(例如網頁伺服器),最好不要使用大量磁碟空間來擁有許多 Active Directory 架構快取複本。 設定登錄機碼
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\adsi\Cache\PerMachine
至 1 (一) 會將 ADSI 還原為先前的行為:所有 Active Directory 架構 物件都會儲存在其先前的位置;登錄機碼將會位於
HKEY_LOCAL_MACHINE\Software\Microsoft\ADs\Providers\LDAP
而快取檔案將會位於
%systemroot%\SchCache
在此情況下,系統管理員帳戶應該執行應用程式,這會導致架構檔案在全域位置中快取,以供較不具特殊許可權的使用者日後使用。