对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。5 h3 M% l. R( N+ v) v( W
1 G7 @' O3 Z+ y3 D2 A, G, `
Regsvr32.exe 的用法
* @% t' ~+ H( ]( C* |! J6 l6 i/ d; \5 H6 L
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname - c- q7 z; p" y! C
2 ~& m! a; c i0 G: V9 J
/u - Unregister server<BR/>
% L+ n# n( f# o$ [* ~- ~# L& X /i - Call DllInstall passing it an optional [cmdline];
" I4 ]5 h' e+ ^( k _; A+ ] Y when used with /u calls dll uninstall
; r1 d) m2 S! D) ~/ I* p /n - do not call DllRegisterServer; this option must
9 F- J$ u( ~7 I, A1 ? be used with /i 0 s6 Z9 k; g9 w- ?$ G
2 S/ N! z/ ~: h S- g% _) ^+ Y当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点: 3 {+ ]2 E0 h% b5 R; E1 |
http://msdn.microsoft.com/librar ... n32_error_codes.asp * c, V& a/ u7 d) ^
' I& N, r/ I4 p, L) D ?% q/ r例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令: ( Z4 z0 e, ]) |
c:\regsvr32.exe sample.ocx 1 o' G4 ^2 n. F% j C* z3 T
0 G/ \, ], Q! ?% P
Regsvr32.exe 错误消息 9 k) E3 l5 y8 \" ]: ?- A
. @3 p2 M0 r, G6 g8 q( h6 J4 E! L以下列表介绍了 RegSvr32 错误消息和可能的原因。
/ k7 c$ {8 N5 b! ]/ h# u5 M# Y- E6 r, l! a0 E) A
Unrecognized flag:/invalid_flag % S; V8 U3 x# u4 N: v& g2 q1 o
8 f9 z! ~, d5 M+ m键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。
8 d, i+ O# Q# G+ D) W. d2 l; R3 |. k1 t, \# _5 p$ U5 W
No DLL name specified.
2 K3 P: W5 O1 P4 _
2 x8 _ W1 X% q; L, W4 m9 d未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。
% m. b b9 V6 t- m+ K- v8 w8 O8 I4 Z& i; _, ~1 H
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
( V8 ^' u" z7 k7 I1 x) c- C1 h: P. g! z* w$ f l" _) |
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。 * A: W: {, i8 r/ m& S
. {$ e5 ]4 Q8 B" U8 T
Dllname is not an executable file and no registration helper is registered for this file type. 5 I/ F s: N4 @" V
8 ^% d. P0 P# y. h9 r, G2 IDllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。
' ]+ E b' S: V' t
$ o, X1 q9 A9 E) p& tDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
+ ~4 m; [7 S4 B) H, d! |& x2 \1 ]* s
% u& Z; T# Q4 k0 d* _9 [( J! f7 X: @Dllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。 2 ]" |) k$ q5 y0 x
: P+ o9 a( ?& `$ }Dllname is not self-registerable or a corrupted version is in memory. $ d! W0 [+ [6 b* x* Y
) O; F5 h$ D$ h. |4 l; M4 V. P
例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章: c6 h. i+ ~/ m
197155 如何终止孤立进程 # \; O; y$ t! i \3 L
6 f" r2 h$ G% u" w; }0 D
OleInitialize failed (or OleUninitialize failed). 4 i7 V, s! a+ b; d3 a
# R m% ]+ z) k* {Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。 ; o! l( H6 G0 [( f) a% P2 M" @) W- O8 H2 a
& K2 e* a: @2 W3 G& n) `) p
LoadLibrary("Dllname") failed.GetlastError returns 0x00000485 ) t8 E5 N/ {# v, c0 H: I& h
9 s0 n0 e! G" b% M5 N
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。 ) K0 `$ u& G+ r
6 I3 ?/ d$ _/ J7 k# @& a" v
LoadLibrary("Dllname") failed.GetLastError returns 0x00000002
, P; B7 R2 K0 m! M7 |
) W" `9 T. k0 {7 I, }: I在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。
. N4 `% L/ E5 z3 y5 O4 z
6 I8 l$ _( K: uLoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f / x2 c& s: v2 ?1 ^- q) C
. |0 n- d, D" v i0 D M在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。
6 ] i7 Z0 F h; e# @' a# h
. S8 K9 w' j/ m) pDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串 3 O0 @$ E& k! m
4 W; m# S) E$ X) M9 d4 [- C在 Winerror.h 中搜索字符串。 : _0 R$ {( g6 f6 f0 R
Regsvr32.exe 和依赖项
. E) F( f) P; r4 T" |! _% uRegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。
; B# J- o6 m( f- }/ m7 G" k. y v! X! u2 q( T, s, Z6 z% L9 ^
您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。 1 Y, Y7 L8 i5 ~; A) h8 {. u
247024 Tools Included with the Microsoft Windows 98 Resource Kit |