对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。' X6 {8 p3 [' I% B
' L0 _% f0 H0 C6 J& K
Regsvr32.exe 的用法 & Y U- I& k# H& d2 I; m" c
' M" K/ U8 t6 M, h, m5 S" K
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname
% T2 i' g$ T! x! M+ L- L g
$ }3 t, M; n1 T3 U8 Z) J. [ /u - Unregister server<BR/> 0 p' r5 S' o% _& }
/i - Call DllInstall passing it an optional [cmdline]; 6 w) m" H3 H [8 x
when used with /u calls dll uninstall
% z1 z/ W' `( s; A /n - do not call DllRegisterServer; this option must
0 q& h; ?' I+ s( T; S' j be used with /i 3 w" J) L3 d, J0 r" }7 d0 @
* O) L+ r4 g5 a* X. Q9 M$ U7 j
当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:
/ F8 z: ?- S5 L& [+ {/ zhttp://msdn.microsoft.com/librar ... n32_error_codes.asp 9 C* l. J- \ |& ^3 b' f
0 P1 Z" H6 I% v9 U2 _* D4 R
例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:
2 `0 a% q: `& mc:\regsvr32.exe sample.ocx 6 `( h* Z) S' r4 A; E, P
3 X6 I- Q( b( L
Regsvr32.exe 错误消息 % ^0 ^* h2 G# [" g- L; B
3 J ~" C. I: X l3 H3 |以下列表介绍了 RegSvr32 错误消息和可能的原因。
$ a* \) G0 a8 s
: g3 y0 T) N7 L0 _9 gUnrecognized flag:/invalid_flag 4 }7 A$ f& ?* A7 l
; u3 ]. V; I' n+ s v
键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。
: n0 ^) K! n5 A; p T7 j
: @( u. c2 C$ P' }& x* o7 jNo DLL name specified. / l& v+ U/ f) f5 |1 G
) m* A. L: y" l+ I, `未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。
9 E4 P. I5 c' m
2 j3 _9 L" r3 h0 W8 R9 YDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. & M+ P8 c& l* h, ^+ l W9 Q
/ y8 I1 d" F) T0 |" m: F
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。
2 G+ Z* z# _# F8 R) T: Q/ `' |; w% W! U% s1 ~4 }4 ?
Dllname is not an executable file and no registration helper is registered for this file type. % N6 J$ w* U/ a# g
5 K& ]% e' a% X" d) \9 F$ nDllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。 : {/ q% d) A2 F' p8 \8 ~
1 n0 L4 F/ \" ~9 |: J+ DDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
: R! S4 y9 A9 x
1 f, K: M9 B% u8 o$ J9 jDllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。
6 b, z3 |6 }9 N* p9 e q5 o' h( E2 _0 \8 u
Dllname is not self-registerable or a corrupted version is in memory. # ]% r4 s; D/ {" x3 t
! p9 [/ |( `1 U5 s! B& X例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:
) B3 j6 {* P( L3 K7 }197155 如何终止孤立进程 1 W7 @0 b1 v) D2 _
& M" R- _1 D0 Y
OleInitialize failed (or OleUninitialize failed).
1 ?4 C7 T; z4 S/ {% }) y5 X2 z# \) L$ Y/ J
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。 ; F& E7 Q2 D, ^! b- `" T
+ Q7 d: [9 y+ gLoadLibrary("Dllname") failed.GetlastError returns 0x00000485 : \: B: A8 I, S/ l. W: x* e0 q5 y
7 P% D. e8 E d/ L( Q
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。 5 ?! X% M, z M: T& u+ n t# E q' L
4 B8 `0 \: c, M0 N" j2 ]
LoadLibrary("Dllname") failed.GetLastError returns 0x00000002 - Q9 p; U, I% S
1 H: ^9 C* z) o/ {! z. ?8 f在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。
$ P: k; v: k- c0 Z' z. H. f4 A4 g3 v, k$ P& S6 O: E
LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f $ U" f5 g/ N" _) j6 i
6 F/ v( m7 W) _1 f8 j
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。 ' W2 P9 {# s* s8 u( g) l" M
# g7 u# n% i4 ~2 dDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串 . G4 f2 E) \4 {1 [( \
1 `1 A1 T! [- ~6 ~- b V
在 Winerror.h 中搜索字符串。 4 z j! |% P2 Z5 K
Regsvr32.exe 和依赖项
4 b' ~7 W9 @! ~. ?/ ~9 {5 _! l0 wRegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。
5 D; B: _. S7 T+ c1 O
6 W. B% P. h# y您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
( I4 H+ ?, }7 `+ B& h# c6 ]247024 Tools Included with the Microsoft Windows 98 Resource Kit |