对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。
1 J. y7 w6 Q0 m& x7 R4 h' M% S3 S- |. J7 V
Regsvr32.exe 的用法 ) ]8 W7 f& A l0 l& X
' C% K6 R0 J ^' ?' L
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname
% R# v/ ~, O7 B9 w' D9 V. S# E
+ y/ j. |2 [, V /u - Unregister server<BR/>
; ?3 }9 X0 n- q0 r+ \" T e /i - Call DllInstall passing it an optional [cmdline];
- V) u% d9 c7 A4 r* b- E; q" u when used with /u calls dll uninstall
, n: L3 V! V+ K$ k) T5 J# _ /n - do not call DllRegisterServer; this option must . N0 T. p! ~9 i& A9 F
be used with /i
8 X2 S7 f2 N$ ^
% H; P* i" D l n当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:
" h% C7 A8 }$ _! Thttp://msdn.microsoft.com/librar ... n32_error_codes.asp
. r2 ]3 \2 s% m0 S" k) M1 |1 z
% C" ]6 h H! t8 ~例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令: 7 p" W1 |% P5 @% O% A: p6 I# ]
c:\regsvr32.exe sample.ocx
9 w) {; f: C5 m& X8 G, U. }) v) l! p4 V/ W* W( R
Regsvr32.exe 错误消息
3 f+ d- ]2 m% y, v' {( i5 K% g/ [
. w5 w7 e# s7 R9 y2 C以下列表介绍了 RegSvr32 错误消息和可能的原因。
) r% {; K* `3 Y! c& P$ p# m. C/ a
Unrecognized flag:/invalid_flag 5 Y$ B0 }1 B3 z6 E% H
4 M7 K& M9 K# m4 n3 |6 @( l键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。
' i* q) S& E- g0 _4 [
* R5 }8 _" _5 c" MNo DLL name specified.
0 z5 ?, k- G7 d. a
% x" A8 k5 F1 F7 g未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。 - y6 [5 u0 |2 ]# P8 n
3 y! ^- L% w6 k) _8 `9 G/ z9 @Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
/ K% g- r% K$ v2 P; z* X4 u! c4 T% g! A" ~
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。 I8 W! N- m" s
5 g% ?7 h( A& s$ N2 _+ F* G. R* `8 k2 C
Dllname is not an executable file and no registration helper is registered for this file type. , |% f4 C# f2 a- }. J
3 ` o t+ H& ^
Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。 ; G# T! G/ z4 c
; X6 u7 k- B- q# n; R8 ^8 V! ^
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. 7 ~2 W* {6 P* w% g* D4 V; U7 v
4 u0 z! D6 r( _. C- d0 zDllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。 & O, o5 j- R- Y1 q/ U; p) h1 i, y
9 @5 k! L1 m5 {- x6 JDllname is not self-registerable or a corrupted version is in memory. 3 a' }& V7 ]7 J* ]$ ^
2 Q% L4 a" Q" }& |例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章: I0 Q* f; K6 A f z
197155 如何终止孤立进程 J+ s1 p( ^. O l( [
, k; I! U+ p8 M" s2 b+ F& }OleInitialize failed (or OleUninitialize failed). 7 D' ^- p# m: b+ P. _
5 r) l1 \8 W. ] R1 @
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。
0 l5 A# l1 a2 a" M" ?5 W$ h J! h7 J8 V& G7 F8 V
LoadLibrary("Dllname") failed.GetlastError returns 0x00000485
( Q! F# s' G x, p. s @$ g7 n6 o, e4 B
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。 7 ~% t y1 y' C6 K' o8 S" n8 q9 j
7 f" O" C' m# |
LoadLibrary("Dllname") failed.GetLastError returns 0x00000002
, R+ Q, i0 b. D8 k& ^" D; n
+ R( V# \( h' a7 ]5 j在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。
9 L: c1 F+ _: u k
/ s* R- y( |- u5 C8 N; sLoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f
3 n- o7 |( P; A Z" c1 r' `) K% c
0 Z. T: n: U" _, E- y# d! m在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。
7 b, h. {! r5 }1 A O% h
8 f) {8 I- C5 B# c Z; a3 wDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串
# i7 M) e1 I, t3 E
. [# J$ Q" Q" d& m! N4 M- k6 I在 Winerror.h 中搜索字符串。 @9 P7 U6 ?; [- x) d7 T
Regsvr32.exe 和依赖项
8 h7 Z3 b3 T. i9 j& Q2 d/ O% y" gRegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。 ' B; S2 p* {! `& U7 n. e# \, T3 {
' q" X! B" A7 }! p1 k1 I2 X3 E您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
4 u5 l- @9 u! m% s3 V/ Q6 X247024 Tools Included with the Microsoft Windows 98 Resource Kit |