Windows-Server-2008

如何在沒有 RegAsm 的情況下使用 PowerShell 註冊 DLL

  • August 27, 2014

我有一個引用一些Visual Basic 6.0 COM 對象的ASP Classic應用程序。這些 Visual Basic 6.0 COM 對象之一引用另一個第三方 DLL。

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

我找到了使用 PowerShell 在沒有 GACUTIL 的情況下在 GAC 中註冊 DLL 的腳本(參考:http://weblogs.asp.net/adweigert/archive/2008/10/31/powershell-install-gac-gacutil-for-powershell。 .aspx)。

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

第一個問題:沒有 GACUTIL。

也就是說,伺服器上沒有 GACUTIL,我使用上面提到的腳本解決了這個問題。

第二個問題:RegAsm 找不到程序集。

32 位 .NET Framework 下的 RegAsm 找不到 DLL。 錯誤報告

RegAsm:錯誤 RA0000:無法找到輸入程序集“C:\Windows\System32\xxxxx.dll”或其依賴項之一。

因此,我使用了 64 位變體,並且效果很好。

但是當我執行我的應用程序時,我的事件日誌中出現錯誤:

ActiveX 組件無法創建對象。

一般來說,這是因為它找不到要創建的對象,這意味著託管該對象的 DLL 沒有正確註冊。

所以我現在要做的是找出是否有使用 PowerShell 的 RegAsm 的替代方法。

這可能嗎?腳本是什麼才能讓它正確?

不確定,但您的問題似乎來自 UAC 虛擬化的副作用(本文也可以提供幫助),它存在於 Vista 中並且在這裡仍然有效。一個摘要是文件系統和系統資料庫的系統部分現在受到保護,不受使用者訪問,但假設舊的(32 位)程序繼續在系統上工作,讓他們相信他們在這些部分上寫,但實際上他將它們重定向到使用者的地方。查看系統資料庫中的“HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node”。

我最近遇到的一個問題是我的 MSI 是用 32 位庫建構的,因此在 64 位機器上安裝期間呼叫這些庫會使 UAC 虛擬化將我的系統資料庫項安裝在 Wow6432Node 中。這篇網際網路文章幫助我解決了這個問題。我使用 Orca 將 Installutillib.dll 從 32 位替換為 64 位。

RegAsm並且GacUtil適用於 .NET 程序集。對於 COM 組件(在 dll 中),您需要使用regsvr32.exe.

COM 註冊是與 .NET完全不同的過程,regasm它通過將 .NET 程序集包裝在 COM 代理中以使其在 COM 中可用來跨越差距——這是互操作的可能性之一。

不是 GACUTIL

GacUtil附帶 .NET SDK,對於非開發人員系統,其工作應由安裝程序完成。

引用自:https://serverfault.com/questions/253096