对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。# \5 P8 w) l) J1 @: J8 K
1 R* H+ X& r; v7 a" pRegsvr32.exe 的用法
# i% G$ I. M( `( B, ]0 }( u" o5 S7 T) q4 V
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname
% c8 x3 J: R, C. E7 p9 b& j, B) R/ J0 }* j% ?5 k |
/u - Unregister server<BR/>
) `+ Q8 h( c3 R) K2 Y( e7 \ /i - Call DllInstall passing it an optional [cmdline];
4 l+ v! q; K' ^ when used with /u calls dll uninstall : Z4 y0 J, ~7 K% z9 R' x/ n; B& t
/n - do not call DllRegisterServer; this option must ( `; Y! H) K2 o. V- b& { T
be used with /i 7 O; U0 Z5 H4 d
3 Q1 w; y! W- |: D7 Z当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点: ( D3 @' t/ ^/ Z2 F$ X
http://msdn.microsoft.com/librar ... n32_error_codes.asp " P, K. O l" z$ K0 l6 L
4 i" y: Z* k- ?例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令: 2 { m; l$ M4 t2 Z
c:\regsvr32.exe sample.ocx 0 J7 f4 i# ?& y& R4 A7 D
& I1 X, B: q9 e. P5 _
Regsvr32.exe 错误消息
% a" r4 ^4 z7 R# a
; }* ?! d5 t% C; A以下列表介绍了 RegSvr32 错误消息和可能的原因。
0 d# F) T' \0 _! ?# |6 V2 S$ R4 ?8 U3 [# U9 s
Unrecognized flag:/invalid_flag
9 ]1 v0 W9 X" R4 G, w7 {% t& K
# I! U s4 |6 w% @% P) _键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。 5 Q/ y5 h. a4 s' R0 N2 i* Q( f
" x9 P# I% x; u; a
No DLL name specified.
/ t1 W1 U- j2 ]( }; |. d, E
6 E. E' A8 m$ y+ w t' t( _; t未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。 W& n( r: m# T! z
- J" |8 I1 \! s4 _. yDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. ) g" {6 ?+ N2 V5 m f) s
7 ~; n4 O9 F& \1 l& D! bDllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。
- c0 ?6 q6 Q9 v1 [! a' I' ~
* @. A4 p4 h! Z4 zDllname is not an executable file and no registration helper is registered for this file type.
) n. J2 O: a7 V+ k, i: J" A/ u/ h( p% ?0 i( J0 Q
Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。 ' [6 d5 a' Y5 {
7 U- r5 }3 G) u. Y( m* z+ v
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. , ~5 p1 y. N" L6 N, N- T; t
5 q2 b% A/ E' w. M/ @; I3 Z
Dllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。
% P# o$ ? _" f# |( m8 d. E
4 t: O" }0 h: H/ x! b3 M7 H! CDllname is not self-registerable or a corrupted version is in memory.
/ w) M+ ^4 ?* I4 u0 r: ]8 _5 n" O
- y5 \( t5 b+ C' W例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:
% ?& ~7 F6 `! T$ m0 {% K197155 如何终止孤立进程 % A+ y8 n s5 ^( |1 R
, V! M7 I+ W2 \; v- E
OleInitialize failed (or OleUninitialize failed). . @; w$ b/ R7 M- T( m2 T
0 f7 L: T, d* J3 ^
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。
- O- \* H, g3 H- g) r8 \9 [" Z) f, _" U2 @! T/ ?: u
LoadLibrary("Dllname") failed.GetlastError returns 0x00000485 ) o h8 r1 a) o+ f5 B: {/ f
9 [$ t. K$ b$ v2 Z7 b# q. ]
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。 , h1 G' x; F& f8 n
$ T- ^/ ~& h$ Q3 a; J, ^7 ]5 i9 z/ NLoadLibrary("Dllname") failed.GetLastError returns 0x00000002
3 V7 }% N" V2 Y* A: n! W
" \4 a3 g3 `7 v. M6 c& L在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。 , \. E' x( \& R( N; V
9 N( i7 S$ S0 M% h+ ^3 r" [2 WLoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f
5 J7 E0 r$ ~# y! T- t8 ^# o- N/ _1 p" i- c, o, O* H
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。
) S f/ a7 b# n" R' @! h
9 B4 a5 Y3 c$ p/ U" a; C5 o7 u! q8 eDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串 p) j0 `& X3 R# }, Z& u
4 n6 d4 \6 X" @ G U S
在 Winerror.h 中搜索字符串。 + r6 n9 P4 k+ D8 ^
Regsvr32.exe 和依赖项 3 Z& a5 _$ {; x( D. ?+ E+ Q. t
RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。
+ t( j& L* f$ I! o& G+ A
. A+ L9 x: s8 n/ `2 @& U您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
J/ d) o1 `. _% S3 f" W247024 Tools Included with the Microsoft Windows 98 Resource Kit |