實戰系列2-COM+物件建立時發生Permission Denied
【問題】
從Windows 2000平台搬移一個ASP Web到Windows 2003,其中有些VB COM+元件。
於是在新的Windows 2003平台上手動建立新的COM+ Application,並將DLL加入。測試後,ASP發生建立元件時逾時錯誤。
【分析】
為了釐清問題,我們先隔離COM+ Application/ASP的因素,先將該DLL自COM+ AP移除,以regsvr32方式註冊,並寫一個極簡單的Set
o=CreateObject(“Boo.Foo”) VBScript做測試。結果物件可成功建立,若重新將元件DLL註冊於COM+
Application中,VBScript即得到以下的錯誤訊息:
回頭比對原本Windows 2000的COM+ Application設定,發現一個設定的差異,以下的選項在Windows 2003的COM+ AP中是勾選的。
它的中文翻譯是”強制此應用程式的存取檢查”,用Google查詢”Enforce access checks for this
application”可以查到一篇MS PRB: Access Check Is Enabled by Default When a COM+
Application Is Created。(錯誤訊息/UI文字直接放入Google就變出答案來,這是裝英文版的人才有的特權囉!)
由以上的KB,可知由於Windows 2003下的COM+ Application預設會啟用該選項,若保留該選項,又沒設定Role,就可能發生權限問題。
將該選項清除後,再試一次,一切OK,Case Close!
從Windows 2000平台搬移一個ASP Web到Windows 2003,其中有些VB COM+元件。
於是在新的Windows 2003平台上手動建立新的COM+ Application,並將DLL加入。測試後,ASP發生建立元件時逾時錯誤。
【分析】
為了釐清問題,我們先隔離COM+ Application/ASP的因素,先將該DLL自COM+ AP移除,以regsvr32方式註冊,並寫一個極簡單的Set
o=CreateObject(“Boo.Foo”) VBScript做測試。結果物件可成功建立,若重新將元件DLL註冊於COM+
Application中,VBScript即得到以下的錯誤訊息:
回頭比對原本Windows 2000的COM+ Application設定,發現一個設定的差異,以下的選項在Windows 2003的COM+ AP中是勾選的。
它的中文翻譯是”強制此應用程式的存取檢查”,用Google查詢”Enforce access checks for this
application”可以查到一篇MS PRB: Access Check Is Enabled by Default When a COM+
Application Is Created。(錯誤訊息/UI文字直接放入Google就變出答案來,這是裝英文版的人才有的特權囉!)
由以上的KB,可知由於Windows 2003下的COM+ Application預設會啟用該選項,若保留該選項,又沒設定Role,就可能發生權限問題。
將該選項清除後,再試一次,一切OK,Case Close!
0 Comments:
Post a Comment
<< Home