regsvr32 有什麼作用?
要使用 . 在 Windows 伺服器上註冊 DLL 文件
regsvr32
,您首先需要將文件移動到您的system32
文件夾,還是在您呼叫regsvr32
命令後實際上自動完成?如果我只是將一個dll文件放在我的桌面上並在那裡註冊,我可以在註冊後將其刪除嗎?刪除後會發生什麼?
換句話說,regsvr 實際上是如何工作的?
除了@Matthew Wetmore 的正確答案之外,通常發生的事情是它在該 dll 中註冊了所有 COM 組件。
具體來說,它會在 Windows 系統資料庫中創建兩個鍵(+子鍵)。
例如考慮一個 dll:
dao360.dll
,它裡面有多個 COM 對象。對於每個第一個鍵是這樣的:HKLM\SOFTWARE\Classes\DAO.TableDef.36
對於 DAO 表定義對象,鍵的名稱是程序員將在其程式碼中引用的 COM 對象的 ProgID。
鍵下通常是具有預設值的單個鍵:
HKLM\SOFTWARE\Classes\DAO.TableDef.36\CLSID
在這種情況下:
{00000103-0000-0010-8000-00AA006D2EA4}
這是 COM 對象的 Class ID 或 CLSID,它告訴我們第二個鍵的位置:
HKLM\SOFTWARE\Classes\CLSID{00000103-0000-0010-8000-00AA006D2EA4}
此鍵及其子鍵和值具有有關 COM 對象的附加資訊。
需要注意的一個值是以下預設值:
HKLM\SOFTWARE\Classes\Wow6432Node\CLSID{00000103-0000-0010-8000-00AA006D2EA4}\InprocServer32
它具有承載 COM 對象的 exe/dll 的文件路徑,在我們的範例中:
%CommonProgramFiles%\Microsoft Shared\DAO\dao360.dll
這是使用 regsvr32.exe 註冊此 COM 對象時的正確文件路徑。如果您手動移動文件,COM 對象將不再工作,因為此系統資料庫值現在引用了一個失去的文件。
因此,在 DLL 上使用 regsvr32.exe 之前,請將其移動到其最終位置,並且在註冊 DLL 後不要移動它。