none
如何在Windows 2008 R2 上的IIS7.5執行ASP,並且可使用COM+? RRS feed

  • 問題

  • 各位大大好,

    由於Windows 2008 R2已經不在提供X86的版本,因此小弟試著轉移之前開發的舊系統新的作業系統上面,遇到了一些問題.

    環境是Windows 2008 X86 的 IIS7,使用VB 6開發的COM+元件及ASP語言,

    COM+ 的DLL已經註冊成功,但是ASP在跑時會出現以下訊息

    錯誤 '800a01a8' 此處需要物件

    元件註冊是用Administrator來註冊,在元件管理中有將"授權"下的"強制此應用程式的存取檢查"拿掉,

    識別碼中指定使用者帳戶為Administrator,並將放置程式的目錄(C:\Program files\Web\)權限修改為Authenticated Users 可讀寫.

    但還是會出現相同的錯誤訊息,相同的方式在Windows 2003 IIS6 是正常的,

    不知道有沒有大大遇到過相同的問題?我該如何做?謝謝!

     

    2010年4月12日 上午 03:42

解答

  • 我找了一篇文章,情形跟我很像,是因為使用了GetObjectContext所造成的錯誤,解決的描述如下,

    但裡面寫的"Allow IIS intrinsic properties"項目我怎麼找不到?

    不知道有沒有人知道被擺到那去了?還是要在Reg裡面改?

    http://windows2008forum.com/topic/253-com-problem-in-ws2008/

    Got it ! Depends on how you code.

    * Make sure the "Enable object construction" option is not checked in Component Service MMC. If you check this option, you have to implement IObjectConstruct interface in your source code, otherwise you will get the 80004002 error.

    * In Component Service MMS, on the Conmponent Properties windows, open �Advanced� tab and check �Allow IIS intrinsic properties�.

    In my code, I invoke GetObjectContext() function in objectcontrol_activate() method, if the �Allow IIS intrinsic properties� is not checked, you can�t get the IIS contexts, then conversion exception happens with such codes:

    Set myres = myCtx(�Response�)

    Because myCtx(�Response�) will return Empty. This is why we get 8004e025 and 0x800a01a8 errors.


    • 已標示為解答 AlexLiuMSDN 2010年4月23日 上午 07:57
    2010年4月22日 上午 05:26
  • 我找到放"Allow IIS intrinsic properties"屬性的地方了!

    真的將這屬性checked就可以跑了.

    PS:這個選項在Windwos 2003 Server是沒有的,在Windows 2008 Server才有.

    這個屬性的位置在

    元件服務-我的電腦-COM+應用程式-MyClass-元件-MyClass.XXX<--按右鍵選內容裡面的"進階"就會看到IIS支援(允許IIS內建內容)

    再次感謝各位大大熱情的幫忙.

     

    • 已標示為解答 AlexLiuMSDN 2010年4月23日 上午 07:57
    2010年4月23日 上午 07:57

所有回覆

  • 參考gipi的文章

    [.NET Framework]64位元呼叫32位元元件


    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年4月12日 上午 09:38
  • 謝謝Bill,

    這問題我有想過,為了排除系統上位元的問題,所以目前我是先裝在Windwos Server 2008 X86上面在試

    所以環境上是都為X86的環境,我想等X86環境可以RUN後再用X64的試.這篇對之後的測試將很有幫忙,還是很感謝您.

     

    2010年4月12日 上午 10:13
  • 1. 改授權給 IIS_CFG 群組。

    2. ASP 用 Server.CreateObject 可能會權限不足不能跑,改用 CreateObject 試試。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年4月12日 下午 02:14
  • 1,我將目錄(C:\Program files\Web\)權限修改為 IIS_CFG 可讀寫

    2,將程式改成CreateObject

    未改之前的錯誤訊息是" 此處需要物件 "

    改了之後會出現" 此處需要物件: 'CreateObject' "

    這看起來好像是找不到COM+,可是每當我將ASP開啟時,放在元件服務中的COM+ 元件的球就會開始轉動.

    應該是有呼叫到,但是不知為何會找不到該物件.

    2010年4月13日 上午 02:07
  • 如果是無法啟動ActiveX元件,建議這麼做試試看

    1. 元件服務中的Package做關機(Windows7)是關機,小喵不曉得Windows 2008 R2是什麼翻譯,就是Package右鍵後第三個,主要目的是如果有轉起來的COM+要強迫他停下來
    2. 2.從Package裡面刪除註冊的元件
    3. 從硬碟中刪除.dll
    4. 重新Copy .dll到適當的地方
    5. 重新將.dll註冊到Package裡面去
    6. 從IIS進行AppPool的回收(這個很重要,一定要做)
    7. 重新執行asp,看看是否可以抓到.dll
    但是您的元件已經轉起來,應該是已經可以抓到才對
    建議您試著
    1. 寫一個空的asp,裡面就只有
      <% Set obj=Server.CreateObject("YourProjectName.YourClassName")%>
    2. 回收AppPool
    3. 執行asp
    看看是否會有錯誤訊息!!


    topcat(姍舞之間的極度凝聚)http://www.dotblogs.com.tw/topcat/
    2010年4月13日 上午 08:36
    版主
  • 感謝您,

    1,Windows 2008的元件管理那個項目也是叫"關機"

    2,方法一跟二我都試過,結果兩個都還是出現"此處需要物件"

     

    2010年4月13日 上午 09:43
  • 先寫個 vbs 在本機用 Administrator 測試你那個元件,能跑出東西嗎?

    如果 Server 有灌 Office ,可以用 VBA 測比較方便。

    我用 OWC 在 asp@Win2008 下是正常可跑的,有可能是你元件安裝或權限的問題,若是用 vbs 本機跑可以跑,大部分就是權限問題了。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年4月13日 下午 05:05
  • 1.使用WSH (Windows Scripting Host)測試,將該檔跟DLL放在同個目錄,以Administrator執行,內容如下

    Set g_lang = CreateObject("MyClass.lang")
    Set g_lang = Nothing

    WSH出現的訊息:

    錯誤:程序呼叫或引數不正確

    來源:Microsoft VBScript執行階段錯誤

    2.使用VB Script測試,用IIS 7.5 Run testcom.htm,訊息入下,

    如果以http://localhost/testcom.htm會出現以下訊息

    ActiveX無法產生物件"MyClass.lang"

    如果以http://127.0.0.1/testcom.htmhttp://192.168.131.69/testcom.htm

    來測試,則不會出現任何訊息.

     

    我在想是不是註冊的方式有錯?

    在2000的時代大都用"元件服務"建立後拖拉進去,2003跟2008也是都有.

    或是用Administrator登錄,下指令regsrv32註冊,.Net是用REGSVCS,也是可以,然後去"元件服務"調整權限.

    目前知道的只有這樣,有其他要注意的嗎?

    我有拜讀過以下文章

    http://www.dotblogs.com.tw/topcat/archive/2008/03/05/1188.aspx

    用VS2005在Windwos 7上面寫,有註冊成功了,元件有手動啟動了,但是也無法叫用.

    所以在想是不有什麼不知道的地方需要去調整說.

     

     

    2010年4月15日 上午 03:57
  • 如果 vbs 都跑不出來,那就表示你這個元件沒正常註冊成功。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年4月15日 下午 02:53
  • COM DLL 正常來說,DLL 應該存放在 system32 目錄內。

    我不知道你為什麼強調 vbs 跟 dll 同目錄... 因為 vbs 是從註冊資訊裡面去讀 COM 物件,跟你同目錄有沒有 dll 沒啥關係。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年4月15日 下午 02:54
  • 1,我有懷疑過是不是元件沒正常註冊成功,但是看元件服務的圖有在動.

    不知是否還有那些地方可以去檢查,如System32下有該元件的副本之類或Reg裡面有相關的資訊必須對應?

    可以判斷是元件是成功的?

    2.這是我的誤解,因為照著網路上寫.Net版的COM+,並寫了一個Web的專案跟WinAP專案來引用,Web在Bin下會放該DLL,而WinAP在Bin\Debug下會放該DLL,所以我以為必須執行檔或特定的目錄下放DLL.

    2010年4月15日 下午 05:18
  • 我找了一篇文章,情形跟我很像,是因為使用了GetObjectContext所造成的錯誤,解決的描述如下,

    但裡面寫的"Allow IIS intrinsic properties"項目我怎麼找不到?

    不知道有沒有人知道被擺到那去了?還是要在Reg裡面改?

    http://windows2008forum.com/topic/253-com-problem-in-ws2008/

    Got it ! Depends on how you code.

    * Make sure the "Enable object construction" option is not checked in Component Service MMC. If you check this option, you have to implement IObjectConstruct interface in your source code, otherwise you will get the 80004002 error.

    * In Component Service MMS, on the Conmponent Properties windows, open �Advanced� tab and check �Allow IIS intrinsic properties�.

    In my code, I invoke GetObjectContext() function in objectcontrol_activate() method, if the �Allow IIS intrinsic properties� is not checked, you can�t get the IIS contexts, then conversion exception happens with such codes:

    Set myres = myCtx(�Response�)

    Because myCtx(�Response�) will return Empty. This is why we get 8004e025 and 0x800a01a8 errors.


    • 已標示為解答 AlexLiuMSDN 2010年4月23日 上午 07:57
    2010年4月22日 上午 05:26
  • 我找到放"Allow IIS intrinsic properties"屬性的地方了!

    真的將這屬性checked就可以跑了.

    PS:這個選項在Windwos 2003 Server是沒有的,在Windows 2008 Server才有.

    這個屬性的位置在

    元件服務-我的電腦-COM+應用程式-MyClass-元件-MyClass.XXX<--按右鍵選內容裡面的"進階"就會看到IIS支援(允許IIS內建內容)

    再次感謝各位大大熱情的幫忙.

     

    • 已標示為解答 AlexLiuMSDN 2010年4月23日 上午 07:57
    2010年4月23日 上午 07:57