对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。0 S$ U1 `& J. ~1 u# |6 l
8 a6 i [9 T( U; \" k/ ]
Regsvr32.exe 的用法 0 T8 n: t: `5 X
; q* O( I _0 oRegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname * W! X6 d- G( X# P5 T, v$ g
M) V+ ]6 P8 B9 t
/u - Unregister server<BR/> 8 U$ P( I4 U' D2 y! y
/i - Call DllInstall passing it an optional [cmdline];
( h) m, Z) ~0 y, {2 {1 B when used with /u calls dll uninstall 4 a0 P/ f- f7 `. Y7 E# l0 _7 J# p
/n - do not call DllRegisterServer; this option must
/ z% h, o Q3 I0 w5 h be used with /i
- V! _" P/ r. I: S( l, {5 ~; u
0 g5 j) M2 Y1 }5 K当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点: % ^' _! o. k5 x8 g7 m
http://msdn.microsoft.com/librar ... n32_error_codes.asp % q# O$ M2 g8 d! {0 [3 \: n
5 J" I$ o* r) M8 e( n; H例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:
& }6 v6 Z, r/ X1 h' h0 Ec:\regsvr32.exe sample.ocx
% y. i- r0 j- S6 x z) s& P$ t1 P* p/ e4 U
Regsvr32.exe 错误消息
6 t6 C! j+ T4 ?$ Q0 S3 Z
" I( ~/ [3 N& p! L以下列表介绍了 RegSvr32 错误消息和可能的原因。
8 v: p1 _1 K! I. t, x" E
% n) _5 B' Z3 \) g \Unrecognized flag:/invalid_flag
7 R1 B) y% n& I2 f# f3 {5 N
) G" p4 P0 [. @- X& K键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。 / W3 ]3 l8 H5 i w3 l2 ^# z% d
$ V: J# @% J3 ]$ O
No DLL name specified.
. ?, q! Z; I. p
, n7 t7 `6 {4 ^' q( C未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。
% _ u5 B( u& Z1 ~# f
+ D9 b% ` @3 N8 E8 E4 I% qDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. 1 ?1 I% Q( @" k1 r, M/ [5 G
# D8 P8 ]; S7 z, C& [9 KDllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。 ; n9 r c& ^. m, @' i+ l0 J0 G
7 H4 B2 r# p7 t/ ^5 U# m7 e) v( m; ?
Dllname is not an executable file and no registration helper is registered for this file type. k# u+ {3 ]- [4 m
5 y4 c. X! K! x" j8 ~Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。 # n* q5 K5 Y+ Z6 h1 M% I
% t3 N/ v/ ]) B- \3 MDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
* p, n/ o i% |7 c9 o5 E1 L3 w% }* F h* [ o+ }
Dllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。
! Q0 g3 `. H1 ~3 x& d4 q
' ]$ X5 ?, D* N, d; G; mDllname is not self-registerable or a corrupted version is in memory.
1 y- D/ l, \) H; m+ q% `, s* Y I* p1 ?9 A( a1 L
例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章: 4 A. D# a7 v7 h2 u, C
197155 如何终止孤立进程
9 o" l g u0 c! Y, [- I* P' K3 e7 ], S
OleInitialize failed (or OleUninitialize failed).
3 x- J. f" ]9 s8 F7 b1 i& Q0 F- d8 V+ C5 U1 W
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。
2 d- M# f; I7 F6 J+ M N) Z
3 R! C4 g& F9 l) o; G$ ?LoadLibrary("Dllname") failed.GetlastError returns 0x00000485 , v, J6 z9 |1 m( K* Y
" }" Y/ e% r3 l
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。
/ u) J9 ^( K8 Q' H/ [0 I9 \7 a* g; Z* Y6 w, p
LoadLibrary("Dllname") failed.GetLastError returns 0x00000002 ' Y% f1 s }- v9 n7 y5 p
5 Z: a# l7 R% z) j+ w
在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。 # w4 g L5 s; i/ z2 p5 q9 ]
- f3 l7 @" e* w/ }LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f
4 R5 L$ B3 b' _3 z/ x
# i: g% y( h `/ w8 z在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。 2 B/ k p. n0 F5 @; ^* W, a
3 u( b* m) y) Y7 p* b5 C% wDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串
$ C7 a$ b+ X8 a* k
4 x/ z# B3 P% W4 W2 ]! r( {在 Winerror.h 中搜索字符串。
+ x4 g# n6 n; u1 LRegsvr32.exe 和依赖项
. q% o% J. ~; f/ J T( ^9 L( e% TRegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。
; N* v: c+ a) v0 G! g% E2 `, _4 ?: [0 g5 L' G- b
您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
1 Q; F' {# Q# N247024 Tools Included with the Microsoft Windows 98 Resource Kit |