2012-12-11 61 views
11

的Windows 7 32位,IIS 7.5.760016385的Server.CreateObject()失敗與32位Windows和IIS 7級

我在Visual Basic 6.0中創建一個DLL,並試圖從傳統ASP代碼中使用它:

set obj = Server.CreateObject("a.b") 

我得到以下錯誤:

006 ASP 0178
Server.CreateObject Access Error
The call to Server.CreateObject failed while checking permissions. Access is denied to this object.
err.number = -2147024891

我曾嘗試創建iusr_cmpname用戶在這個ASP頁的默認網站和虛擬目錄賦予的權利吧。我有REGSVR32的dll的。

我已經轉到「打開和關閉Windows功能」並選擇了IIS /萬維網服務/應用程序開發功能,然後檢查了ASP,ASP.net,ISAPI擴展和ISAPI文件。

我在不同的新聞組中關注了許多潛在客戶,但我可以通過這個問題。 去年我們嘗試了這一年,一年零一個月前,並有同樣的問題。由於我們無法克服這個問題,我們回到了Windows NT。我們在NT上從未遇到過這個問題。

現在我們再次嘗試通過這個,所以我們可以再次移動到Windows 7。似乎很多人都有這個問題,但他們找到併發布的任何解決方案似乎都不是我需要的。

任何幫助將不勝感激。謝謝。

+0

您從IIS接收到的錯誤消息是什麼? – Treborbob

+0

Err.description是「006〜ASP 0178〜Server.CreateObject訪問錯誤〜在檢查權限時,對Server.CreateObject的調用失敗,訪問被拒絕訪問此對象。 err.number = -2147024891 – user1894838

+0

您是否嘗試將apppool用戶/ iusr設置爲本地管理員?只是爲了測試...或使用另一個Windows用戶的appool和Web應用程序等待...你試圖添加一個Web應用程序,而不是一個虛擬目錄? – ulluoink

回答

0

本頁建議問題可能是分配給VB運行時的訪問權限。嘗試爲Msvbvm60.dll分配所有人的讀取和執行權限。

http://support.microsoft.com/kb/278013

+0

謝謝彼得,我早些時候嘗試過。我添加了「Everyone」,「iusr_comp_name」,「網絡服務」的運行和執行權限 – user1894838

4

我強烈建議使用Procmon找到訪問衝突。幾年前我有過類似的問題,這是解決問題的唯一方法。在這種情況下,事實證明系統臨時文件夾缺乏權限。

如果您發佈了來自Procmon的結果,我可能會修改此答案以提供更多幫助。

+0

嗨大衛,我添加了進程監視器。當我嘗試運行這個ASP頁面PRL.asp時,它表示進程名稱是w3wp.exe ...操作是QueryAllInformationFile ...路徑:d:\ xxx \ PRL.asp ...結果:溢出緩衝區.. ... ...下一行說:進程名是w3wp.exe ...操作是QueryOpen ...路徑:d:\ xxx \ prl.asp \ web.config ...結果:找不到路徑。 - - - - - - - 謝謝。有任何想法嗎? – user1894838

+0

這聽起來像你只是沒有一個web.config文件 - 是否有其他錯誤? –

+0

這是一箇舊的ASP應用程序,我們有一個GLOBAL.asa,並且不需要web.config。其他錯誤:RegQueryValue和RegQueryKey說未找到名稱。一些條目說緩衝區太小或緩衝區溢出。 – user1894838

4

該問題似乎與IIS無法訪問文件系統上的自定義VB6 Active X dll有關。 我註冊了一個我創建的自定義dll,與默認的web應用程序在同一個目錄下,並且能夠獲得ASP來創建對象。

這裏就是我所做的:

  • 全新安裝的Windows 7專業版64位SP1的。

  • 啓用Windows ASP功能

  • 這一步僅適用於64位Windows - 使用IIS管理器,啓用默認的應用程序池的32個應用程序。

enable 32-bit application pool

  • 創建一個簡單的VB6的Active X DLL(類名稱爲「CXUtils。。utils的「),增加了兩個輸入數字,並返回結果

Utils.cls:

Public Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer  
    Sum = a + b 
End Function 
  • 這是重要的一步 - 在管理命令提示符,註冊VB6的Active X DLL放在默認的Web應用程序的位置: C:\的Inetpub \ wwwroot的

Register Custom VB6 DLL

  • 創建並安裝一個簡單的asp頁面,從上面實例化dll。安裝位置是默認的Web應用程序的位置C:\的Inetpub \ wwwroot的

的Default.asp:

<%@ Language=VBScript %> 
<% 
Option Explicit 
Response.Expires = 0 
Response.Expiresabsolute = Now() - 1 
Response.AddHeader "pragma","no-cache" 
Response.AddHeader "cache-control","private" 
Response.CacheControl = "no-cache" 

Function Sum(a, b) 
    Sum = a + b 
End Function 

Function Sum2(a, b) 
    Dim adder 
    set adder = Server.CreateObject("CXUtils.Utils") 
    Sum2 = adder.Sum(a, b) 
    set adder = nothing 
End Function 
%> 
<html> 
    <head> 
     <title>Add</title> 
    </head> 
    <body> 
    <b>2 + 3</b> = <%= Sum(2,3) %><br /> 
    <b>3 + 4</b> = <%= Sum2(3,4) %> 
    </body> 
</html> 
  • 瀏覽到Web應用程序,並查看結果

Sample asp page results

我很抱歉,如果這不是所有的編譯 - 有很多編輯來獲取格式以正確顯示。

+0

感謝Chue,在我的舊XP機器上,這工作得很好,甚至沒有在Component Manager或REGSVR32中註冊COM對象。但在新的Windows 7機器上,它在createObject行上失敗了,我會嘗試以兩種方式或兩種方式註冊它,也許這樣簡單的事情會導致對這個問題的更好的理解 – user1894838

+0

嗨Chue,我只是註冊了regsvr32,它工作正常。我會嘗試註銷,然後使用組件管理器,然後兩個。謝謝你的幫助。我會嘗試增加這個簡單的COM對象的複雜性,直到它總是失敗,這應該讓我更好地理解。你的幫助--- Doug – user1894838

0

我想我有類似的問題。我試圖在一個經典的ASP應用程序中運行在VB6 IDE中的VB6 DLL中交互調試代碼。當應用程序執行Server.CreateObject語句時,它返回以下錯誤:

服務器對象:006〜ASP 0178〜Server.CreateObject訪問錯誤〜調用Server.CreateObject時檢查權限失敗。訪問被拒絕給這個對象。

順便說一句,我在Windows 7環境中運行IIS 7.5。我終於找到一篇微軟文章,稱這個問題是由於在DCOM中VB ASP調試缺少註冊表項和/或DCOM權限不足,而不是IIS造成的。該文章的URL是http://support.microsoft.com/kb/q259725。我實施了Work Around#1。稍後重新啓動,我可以從ASP進入VB DLL代碼。粉筆一個微軟,我不這麼經常說:-)

0

另一種可能的方法是將DLL作爲DCOM應用程序安裝在dcomcnfg上。它將以不同的憑據運行。

相關問題