对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。9 U$ m7 [0 B9 ?3 E5 R
u$ ]5 t/ M% G5 k) }. L1 Y. vRegsvr32.exe 的用法
4 k5 U. M+ i6 S7 i; l% \9 i
4 W- _7 [ Z) Q7 ]! eRegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname ! J% I, w/ w/ X6 q* Z7 `# \& d
! T% F! |5 n8 F2 J l- ^6 i /u - Unregister server<BR/> 8 h6 u! p; u, i
/i - Call DllInstall passing it an optional [cmdline];
! q0 S8 q: N' O. r6 J; G2 o) ?( i when used with /u calls dll uninstall
4 G' {; h4 w5 y0 n. g5 { /n - do not call DllRegisterServer; this option must
1 \, B3 T g! W' _, U- @$ X be used with /i
; F5 b' n2 m$ M3 J: ^9 }: ?+ @# c7 w& l
当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:
4 T, H8 {% O1 s7 C& Thttp://msdn.microsoft.com/librar ... n32_error_codes.asp
8 U( G# b6 x* c& R& A# f$ L) v
% g& I3 G3 Z) e$ |8 ]例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:
1 ` e- j+ K$ I9 c/ T* {+ Dc:\regsvr32.exe sample.ocx
`! ]0 O+ K; ]# S) }9 i( \' E
& s6 l$ X( s2 z- _0 J1 XRegsvr32.exe 错误消息 $ B6 M6 s2 ^* }# U
. t. J2 G3 X# }: z1 Q以下列表介绍了 RegSvr32 错误消息和可能的原因。
$ S5 D N8 L( L6 l' E V/ J, a- y# G( Q+ s3 K$ h1 d! w$ j/ _
Unrecognized flag:/invalid_flag ( ]; F( z4 _2 i2 o8 c
2 ?) H9 I- W" M0 B, U, f. R5 x
键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。
+ b- S9 Q8 ~8 h2 O& ~
d9 _) v4 k" Y8 UNo DLL name specified. 9 T# F( v! C% k" ?6 a0 M- G# C
( n5 _4 E' S( e. T* G" P
未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。 " b/ t' R0 A; d% l! ^. a
# i4 W' U! E5 k$ U; EDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
* h+ I$ A/ e4 _# m( k: o( [8 R7 c! l* S }4 `1 e
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。
& s. E3 B) V6 X( c; e n
: \2 X8 H" b C4 h5 gDllname is not an executable file and no registration helper is registered for this file type. ) c2 R. S" f. w0 a+ M9 X
9 g0 R6 Y! o' K4 R
Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。 : u4 H* ~) n' W
8 y% J; [0 ]( m* ~2 _6 x( H: s5 ^* q nDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. 1 S. A9 K6 i0 ^ }: f# q
! T" g6 s1 |$ C5 W! B8 EDllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。
! W8 ^% p5 f l8 E/ W; S; L* f' H! n' H) f! s
Dllname is not self-registerable or a corrupted version is in memory. / @. v* D' v9 |4 W& Q$ P2 Y
% |/ [/ ]- c1 b5 {& m3 Y
例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:
& D/ w8 s$ p5 ]197155 如何终止孤立进程
( f' v/ Y, [) n* u7 q' z8 ?" Q5 W% |$ J# F
OleInitialize failed (or OleUninitialize failed).
/ W. e0 O4 [) ]1 }5 b$ B
3 n, Y8 A3 u8 O1 VRegsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。
+ M& L; i4 M$ ]2 R! ]8 o7 g' G2 y% X: @# \" {) o; H# y
LoadLibrary("Dllname") failed.GetlastError returns 0x00000485 % Y$ Y0 T' W# o9 m, n' P# s
! T) }( ?0 w4 v& j
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。 ; a* O& A. X3 L/ V" r6 ]
* t( u: V" X+ n# n* f. S
LoadLibrary("Dllname") failed.GetLastError returns 0x00000002
3 }9 }$ O- B) j( V3 H: ]& u& d9 v+ K5 o' _' A7 \' D- A& @9 ~- a, ^
在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。 + g* Z" e) i: R( N
2 |! Z; l7 m ~" H0 ]) L9 WLoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f + f; T- D# e8 B/ S, i! C
4 D1 }! w7 R: b; @# l. ?在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。 6 a8 a+ i) N/ M, K5 J
7 Z* ?7 A" N$ _: }: r0 ZDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串 & d& `+ E$ c: e. c6 K
4 j" V' \2 ]& i+ Y" n* x8 C! w
在 Winerror.h 中搜索字符串。 5 @4 b# D% P/ x+ o& `
Regsvr32.exe 和依赖项 . U- ` v( S+ F) @6 W u
RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。 ; F) E1 N6 r8 v/ b% J
0 {' p& ~+ o$ L: w5 D+ s您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。 : {& f/ x/ x/ W9 A- j
247024 Tools Included with the Microsoft Windows 98 Resource Kit |