如果本文没有介绍您所收到的错误消息,则您可以从 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,为其传递一个可选 [cmdline];当与 /u 一起使用时,可调用 dll uninstall /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 时收到错误信息,请执行以下步骤:
-
打开提升的命令提示符。
-
如果 32 位 DLL 位于 %systemroot%\System32 文件夹中,请将其移动到 %systemroot%\SysWoW64 文件夹。
-
运行以下命令:
%systemroot%\SysWoW64\regsvr32 <full path of the DLL>
-
Regsvr32 错误消息
下表包含 RegSvr32 错误消息和可能的原因:
错误消息 |
原因 |
---|---|
命令标志“%1”无效。 请查看命令用法,然后重试。 |
在命令行中将无效的选项组合传递到 regsvr32.exe。 |
仅当打开 Microsoft Visual Studio OLE Activex 控件项目时,此命令才有效。 |
Visual Studio 调用了 Regsvr32.exe,但命令行中未指定模块。 |
要注册模块,必须提供一个二进制名称。 |
调用 Regsvr32.exe 时未在命令行中指定任何模块。 |
命令 OleInitialize 运行失败。 计算机可能内存不足。 请关闭任何打开的程序,然后重试。 |
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 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 位)版本兼容。 |
例如,当在 x86 计算机上运行 regsvr32.exe,并且命令行中指定的模块为 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 失败)。 |
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。 如果尝试对 COM 库进行初始化或撤消初始化时失败,就会出现这些错误消息。 例如,Ole32.dll 文件可能已经损坏,或者其版本有误。 |
|
LoadLibrary ("Dll_Name") 失败。 GetlastError 返回 0x00000485 |
从 Winerror.h, 0x00000485 = 1157 (ERROR_DLL_NOT_FOUND)。 这意味着“找不到运行此应用程序所需的库文件之一。” 例如,如果找不到 Missing.dll 文件,键入 regsvr32 missing.dll 后,就会返回该错误消息。 |
|
LoadLibrary ("Dll_Name") 失败。 GetLastError 返回 0x00000002 |
从 Winerror.h, 0x00000002 = 2 (ERROR_FILE_NOT_FOUND)。 这意味着 “系统找不到指定的文件。” 换言之,系统找不到相关的 DLL。 例如,键入 regsvr32 icwdial.dll 并且缺少 Tapi32.dll(依赖项)将返回此错误消息。 |
|
LoadLibrary("dskmaint.dll")失败。 GetLastError 返回 0x000001f |
从 Winerror.h, 0x000001f = 31 (ERROR_GEN_FAILURE)。 这意味着“连接到系统的设备不工作”。 如果您尝试注册 Win16 .dll 文件,就会发生此现象。 例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。 |
|
Dll_Name 中的 DllRegisterServer(或 DllUnregisterServer)失败。 返回代码是: string |
在 Winerror.h 文件中搜索消息中指定的字符串。 |