如何讓舊的 DLL 在 64 位元伺服器上運行

如何讓舊的 DLL 在 64 位元伺服器上運行

我正在將該公司的網站從 Windows 2003x86 伺服器遷移到運行 IIS 7.5 的 Windows 2008x64。

我遇到的問題是,所有在舊伺服器上運行良好的 DLL 現在每當調用它們時都會出錯。我得到的只是一個通用錯誤,例如:

伺服器物件錯誤“ASP 0177:800401f3”

伺服器建立物件失敗

/folder/scriptname.asp,第 24 行

800401f3

出錯的行是:

'23 lines of comments  
set A0SQL_DATA = server.createobject("olddllname.Data")  
'the rest of the script 

我已經在設定為 32 位元模式的應用程式集區中運行該網站。但是,無論如何我都會收到錯誤。

有人經歷過這件事嗎?我很沮喪,因為我查找的所有資訊都表明我需要做的就是將應用程式集區設定為在 32 位元模式下運行。我這樣做了,但仍然不起作用。我還能檢查什麼?

答案1

這裡如果發現這個:

此錯誤意味著「無效的類別字串」——換句話說,對 CreateObject 的呼叫失敗,因為 OLE 子系統無法找到名稱物件。原因包括:

畢竟你確實沒有在伺服器上執行 regsvr32 。

您執行 regsvr32 但報告錯誤。

有人修改了部分註冊表的安全性,導致 OLE 子系統無法讀取全部或部分 HKEY_CLASSES_ROOT 樹。

您嘗試建立的物件的名稱拼字錯誤或不正確。

判斷是否為權限問題

另外,由於您要從 03 遷移到 08,您是否安裝了 IIS 角色中的 IIS 6 管理相容性附加元件?我不是 IIS 或 ASP 的專家,所​​以我希望這對您有幫助。

答案2

可能發生的情況是,您的 DLL 是 32 位元 DLL,而應用程式集區以 64 位元運行。您需要做的是將運行應用程式的應用程式集區變更為 32 位元應用程式集區。請參閱啟用32BitAppOnWin64:http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add

您可以在 UI 中透過選擇 AppPools 清單中的應用程式集區(選擇樹節點)並使用「進階設定」來啟用它。

相關內容