如何使用 Regsvr32 工具和疑難排解 Regsvr32 錯誤訊息

如果本文未說明您收到的錯誤訊息,您可從 TechNet 的網頁取得詳細錯誤訊息說明、建議行動與其他支援資源。 

摘要

Regsvr32 是可登錄和取消登錄 OLE 控制項的命令列公用程式,例如 Windows 登錄中的 DLL 和 ActiveX 控制項。 Regsvr32.exe 安裝於 Windows XP 和 Windows 更新版本的 %systemroot%\System32 資料夾。


附註 在 64 位元版本的 Windows 作業系統上,有兩種版本的 Regsv32.exe 檔案:

  • 64 位元版本的是 %systemroot%\System32\regsvr32.exe;

  • 32 位元版本的是 %systemroot%\SysWoW64\regsvr32.exe。

Regsvr32 命令語法

RegSvr32.exe 具有下列命令列選項:

Regsvr32 [/u] [/n] [/i[:cmdline]] <dllname>

/u - 取消登錄伺服器

/i - 當 DllInstall 與 /u 搭配使用呼叫 DLL 解除安裝時,呼叫 DllInstall 會將其傳送為選擇性 [cmdline]
/n - 不會呼叫 DllRegisterServer,此選項必須與 /i 搭配使用

/s – 無訊息;不顯示任何訊息方塊

常見的 Regsvr32 錯誤解決方案

當您收到 Regsvr32 錯誤時,請嘗試下列其中一種方法:

  • 方法 1: 透過提高權限的命令提示字元重新執行 Regsvr32 命令如果要啟動提高權限的命令提示字元,請依照下列步驟執行:

    Windows 8.1 和 Windows 8從螢幕右邊邊緣向內撥動,然後點選 [搜尋]。 或者,如果您使用滑鼠,請指向螢幕右下角,然後按一下 [搜尋]。 在 「搜尋」 方塊中輸入「命令提示字元」,在 「命令提示字元」 上按右鍵,然後按一下 「以系統管理員身分執行」。 如果出現要求您輸入系統管理員密碼或確認的提示,請輸入密碼或按一下 [允許]

    Windows 7 和 Windows Vista按一下「開始」,在「搜尋」方塊中輸入命令提示字元或cmd,在「命令提示字元」上按右鍵,然後按一下「以系統管理員身分執行」。 如果出現要求您輸入系統管理員密碼或確認的提示,請輸入密碼或按一下 [允許]

    Windows XP從系統管理員帳戶或具有系統管理員權限的帳戶登入,然後開啟命令提示字元視窗。

  • 方法 2: 使用 32 位元版本的 Regsvr32,在 64 位元版本的 Windows 上註冊 32 位元 DLL如果在 64 位元版本的 Windows 上註冊 32 位元 DLL 時收到錯誤,請依照下列步驟執行:

    1. 開啟提升權限的命令提示字元。

    2. 如果 32 位元 DLL 位於 %systemroot%\System32 資料夾,請將其移至 %systemroot%\SysWoW64 資料夾。

    3. 執行下列命令:

      %systemroot%\SysWoW64\regsvr32 <full path of the DLL>

Regsvr32 錯誤訊息

下列表格列出 RegSvr32 錯誤訊息與可能原因:

錯誤訊息

原因

command-flag ""%1"" 無效。 請檢查命令列,然後再試一次。

無效的選項組合已透過命令列傳送至 regsvr32.exe。

只有在開啟 Microsoft Visual Studio OLE ActiveX 控制項專案時,此命令才有效。

Visual Studio 已叫用 Regsvr32.exe,但並未在命令列中指定任何模組。

若要登錄模組,您必須提供二進位名稱。

已叫用 Regsvr32.exe,但並未在命令列中指定任何模組。

命令 OleInitialize 無法執行。 您的作業系統可能記憶體不足。 請關閉任何開啟的程式,然後再試一次。

在呼叫所需的 COM 程式庫函數之前,Regsvr32 必須先初始化 COM 程式庫,並在關閉時解除初始化程式庫。 如果嘗試初始化或解除初始化 COM 程式庫失敗了,就會出現這些錯誤訊息。

無法載入模組 ""%1""。\n\n請確定二進位檔儲存在指定的路徑,或進行偵錯以檢查與二進位或相依 .DLL 檔案有關的問題。\n\n%2。

載入命令列指定的模組時發生錯誤。 錯誤文字會顯示為訊息的一部分。

已載入模組 ""%1"",但找不到進入點 %2。\n\n請確定 ""%1"" 為有效的 DLL 或 OCX 檔案,然後再試一次

Regsvr32.exe 無法在命令列中指定的模組中找到所需的進入點。 如果進入點未從模組正確匯出,或模組並非 DLL 或 OCX 檔案,就會發生這種情況。

已載入模組 ""%1"",但呼叫 %2 失敗,且錯誤碼為 %3。\n\n如需有關這個問題的詳細資訊,請使用錯誤碼作為搜尋字詞進行線上搜尋。

當 regsvr32.exe 在命令列指定的模組中叫用進入點時發生錯誤。 錯誤碼會顯示在訊息中。

模組 ""%1"" 可能與您正在執行的 Windows 版本不相容。 檢查模組是否與 regsvr32.exe 的 x86(32位 元)或 x64(64 位元)版本相容。

例如,如果 regsvr32.exe 在 x86 版本的電腦上執行,且在命令列中指定的模組為 64 位元的模組,就會發生這個錯誤。


下列表格列出 RegSvr32 錯誤訊息與可能原因:

錯誤訊息

原因

未被確認的旗標: /invalid_flag

您輸入的旗標或參數組合無效。

未指定 DLL 名稱。

您未包含 .dll 檔案名稱。

Dll_Name已經載入,但是找不到 DllRegisterServer 或 DllUnregisterServer 的進入點。

指定的 Dll 名稱不是 .dll 或 .ocx 檔。 例如,輸入 regsvr32 wjview.exe 就會產生這個錯誤訊息。

Dll_Name不是可執行檔,沒有登錄這個檔案類型的登錄協助程式。

指定的 Dll 名稱不是可執行檔(.exe、.dll 或 .ocx)。 例如,輸入 regsvr32 autoexec.bat 就會產生這個錯誤訊息。

Dll_Name不可自行登錄,也並非記憶體中的損毀版本。

例如,輸入 regsvr32 icwdial.dll 就會傳回這個錯誤訊息,這是因為 Icwdial.dll 檔案無法自行登錄所造成的。 如果您懷疑記憶體中有損毀的 Dllname 版本,請嘗試重新啟動電腦,或重新解壓縮原始版本的檔案。

OleInitialize 失敗 (或 OleUninitialize 失敗)

在呼叫所需的 COM 程式庫函數之前,Regsvr32 必須先初始化 COM 程式庫,並在關閉時解除初始化程式庫。 如果嘗試初始化或解除初始化 COM 程式庫失敗了,就會出現這些錯誤訊息。 例如,Ole32.dll 檔案可能遭到損毀,或是版本錯誤。

LoadLibrary("Dll_Name") 失敗。 GetlastError 傳回 0x00000485

From Winerror.h, 0x00000485 = 1157 (ERROR_DLL_NOT_FOUND)。 這表示「找不到執行此應用程式所需的某個元件庫檔案」。 例如,如果找不到 Missing.dll 檔案,輸入regsvr32 missing.dll就會傳回這個錯誤訊息。

LoadLibrary("Dll_Name") 失敗。 GetLastError 傳回 0x00000002

From Winerror.h, 0x00000002 = 2 (ERROR_FILE_NOT_FOUND)。 這表示「系統找不到指定的檔案」。 也就是說,找不到相依的 DLL。 例如,找不到 Tapi32.dll(相依性)時,輸入regsvr32 icwdial.dll就會傳回這個錯誤訊息。

LoadLibrary("dskmaint.dll") 失敗。 GetLastError 傳回 0x000001f

From Winerror.h, 0x000001f = 31 (ERROR_GEN_FAILURE)。 這表示「附加到系統的某個裝置失去作用」。 如果您嘗試登錄 Win16 .dll 檔案,可能就會發生這個問題。 例如,輸入regsvr32 dskmaint.dll就會傳回這個錯誤訊息。

Dll_Name 中的 DllRegisterServer (or DllUnregisterServer) 失敗。 傳回碼是: string

在 Winerror.h 檔案中搜尋訊息所指定的字串。


需要更多協助?

擴展您的技能
探索訓練
優先取得新功能
加入 Microsoft 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與我們的其中一個 Office 支援專員連絡以深入了解您的意見。

×