2011-03-29 222 views
1

我有一個ASP Classic應用程序引用了一些VB6 COM對象。其中一個VB6 COM OBJECTS引用另一個第三方.Net DLL。如何在沒有gacutil的情況下注冊64位DLL

第三方.Net DLL需要在Windows Server 2008 R2 x64機器上註冊。

我已經使用PowerShell(參考:http://weblogs.asp.net/adweigert/archive/2008/10/31/powershell-install-gac-gacutil-for-powershell.aspx)發現腳本註冊在GAC中的DLL沒有GACUTIL

現在我需要註冊程序集。我在本地開發機器(x86)上同時使用了GACUTIL和REGASM。但是當我嘗試在測試服務器上獲取DLL時,我遇到了問題。

第一個問題:NO GACUTIL

沒有在服務器上沒有GACUTIL,我得到了周圍使用腳本上面提到的。我知道它可以使用SDK安裝,但我不想「污染」環境。

第二期:REGASM CAN NOT FIND ASSEMBLY

32位.Net框架沒有找到DLL下的REGASM。錯誤報告:「RegAsm:錯誤RA0000:無法找到輸入程序集'C:\ Windows \ System32 \ xxxxx.dll'或其依賴項之一。」

所以我使用了RegAsm的64位變體,並且工作。

我擔心的是,這是一個誤判,因爲它沒有被32位RegAsm註冊,所以ASP經典程序沒有找到該程序集。

我運行我的應用程序我在事件日誌中收到錯誤:「ActiveX組件無法創建對象」。一般來說,發生這種情況是因爲它找不到要創建的對象,這意味着託管對象的DLL未正確註冊。

所以我現在要做的是找出是否有一個替代方法使用的PowerShell註冊程序集在32位範圍內的REGASM。

有沒有人知道這是可能的,以及腳本會是什麼使它正確?

回答

1

我發現我被放置。在註冊的測試機器上的錯誤文件夾中的網絡DLL。

在Windows 64位操作系統上,您有System32和SysWOW64文件夾。我將DLL放在System32文件夾中,它應該放在SysWOW64文件夾中。

我從RegAsm獲得的錯誤(「RegAsm:錯誤RA0000:找不到輸入程序集'C:\ Windows \ System32 \ xxxxx.dll'或它的一個依賴項。」)應該讓我點擊但我錯過了它。

基本上32位RegAsm找不到我的DLL,但64位RegAsm可以找到我的文件,並通過註冊與64位RegAsm程序集我將該DLL放入64位範圍。我需要它在32位範圍內。

我將DLL表單System32移到SysWOW64,32位RegAsm找到了DLL並在32位範圍內註冊它。

現在我的VB6 COM對象可以找到.Net DLL,它可以在出錯「ActiveX組件不能創建對象」的情況下工作。

說了這麼多,我還沒有找到一個圖書館或功能,將沒有實際使用RegAsm RegAsm同樣的工作。

如果有人發現這個神話般的野獸,請回答這個問題。提前致謝。

0

不確定,但是您的麻煩似乎來自UAC Virtualisationthis article can also help)的副作用,它存在於Vista中並且在此處仍然有效。一個好處是,文件系統和註冊表的系統部分現在不受用戶訪問的限制,但假定舊的(32位)程序繼續工作,系統使他們相信他們在這些部分上寫入,但實際上他將它們重定向到用戶地方。 查看註冊表中的「HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node」。

我最近遇到的問題是我的MSI是用32位庫管理程序構建的,所以在64位機器上安裝時調用這些庫使得UAC虛擬化將我的註冊表項安裝到Wow6432Node中。 This Internet article幫助我解決問題。我使用Orca將Installutillib.dll從32位替換爲64位。

我希望它能幫助

JP

+0

感謝您的信息...我正在調查它。 – 2011-03-30 06:58:15

+0

嗨JP,請閱讀我的回答,以獲取更多信息,瞭解最終的問題。感謝您的幫助和有趣的閱讀。肯定會保持UAC虛擬化。 – 2011-03-30 08:03:27

相關問題