对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。* K: V, o7 f* D4 o$ A9 T
+ ], |" W! C- }2 V' P
Regsvr32.exe 的用法 . {) O' y* N& [+ c, N4 M- y* [
1 G3 M2 w0 c) U! @9 b. A2 I& q
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname % o2 Q2 F# ]. b+ G
7 R4 j0 P. F3 S /u - Unregister server<BR/>
% C" o, f+ o+ y! p* ?6 i; c0 d8 J /i - Call DllInstall passing it an optional [cmdline];
4 q* ?. D M; c/ A+ Z when used with /u calls dll uninstall
e1 S g& y/ x- a /n - do not call DllRegisterServer; this option must 2 y$ Z2 o' [1 {/ H& S: n* ]
be used with /i
, G. q [! m) C: ^9 R8 x) P, ]2 @! `! E4 T- Z
当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:
$ j" `6 \# ]8 ?( z0 Nhttp://msdn.microsoft.com/librar ... n32_error_codes.asp ' X8 Y% A6 S4 E, V+ T% g
5 _: I' q( l' D" T0 h
例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:
- U4 R7 Z6 ] m, t1 J8 Sc:\regsvr32.exe sample.ocx . r$ `6 N# C0 x3 `+ W7 n" w
8 }5 M: J6 N: |# b+ N& e
Regsvr32.exe 错误消息 + s9 v$ e3 k) H
* l, n+ o4 @7 W: h5 y以下列表介绍了 RegSvr32 错误消息和可能的原因。
* e7 J9 ], a5 u+ l2 x& C* g% {2 H# x! y! }2 ?
Unrecognized flag:/invalid_flag
) ?- L. P! k6 X3 x/ P9 n1 W: y
8 _, L6 B8 b r2 N9 A5 c键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。
/ R. E! Y" E6 e$ q2 j
1 A: o0 C8 p1 d0 p- p: J/ u o2 r$ cNo DLL name specified.
7 @3 i. e- j9 g4 g; _3 L2 o4 |2 y( {& p9 u b
未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。
( j4 u" c. {3 }5 N& [ t
) v6 d! R, B2 T3 n& ?3 B& a5 {1 tDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
6 ?7 [2 `7 X o9 c' G7 N# s; P$ |4 R' I
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。
! `: F- S, }3 `3 W; E7 }* }2 L& |" L: G5 F
Dllname is not an executable file and no registration helper is registered for this file type.
% u0 e2 m q: D, ?- S" c/ _
' _; c* O; J3 {; |0 FDllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。
1 N9 F- D" F7 d) O- j! Z' \9 T& e0 i$ B* Q& e P
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
* y: Y, j' E5 Z% X4 h. i- t" j! O0 ?. m P3 u+ j- ^6 G: j
Dllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。 ( c ?' x' ?( Z5 r- e! y% F- |% |
7 S: I- w8 H9 s* NDllname is not self-registerable or a corrupted version is in memory. 1 V8 e* r4 w# X2 ~$ P' ]6 v
4 {4 T. i' I- E P例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:
% Z- }7 d3 V K8 q1 p T197155 如何终止孤立进程
* Y! {5 T/ D" C1 b7 S
, ~9 ?) v4 {+ [( h- D2 o+ ?2 UOleInitialize failed (or OleUninitialize failed). 4 a- ^; C+ W6 Q9 H1 O* ^+ R6 f
) Y1 `: @, m: E4 R* pRegsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。 ! x* \% F" V' y E( q$ t3 R. d, D- N
, r5 B4 S8 S3 L% S$ pLoadLibrary("Dllname") failed.GetlastError returns 0x00000485 ( U. v2 p: J6 c, A8 A
& k. x# [6 I6 r
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。
5 T/ i8 c- L# J3 Y
6 G) G* Q3 o) Q/ qLoadLibrary("Dllname") failed.GetLastError returns 0x00000002
6 K1 g2 F) j/ i7 `% c3 A, L
% D; J" e$ |( `! e$ J) g4 u在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。 . o( [( a, O: a- n+ z
' w% O- }6 g y( |7 s5 P$ K( `LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f + o1 k& _' D% E) s$ C
- G9 [8 k2 n4 ]8 U5 J3 K( L
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。 ) M# X u) |# ~
; a! ^$ P8 ^' a H aDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串 * R+ r" g1 q7 D% @
* t& V0 E; i! n- E; f
在 Winerror.h 中搜索字符串。
8 r6 r, `( A& m0 b! LRegsvr32.exe 和依赖项 3 h/ \- y. |( C! A
RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。
" m- n3 E& l- y2 T3 R' w
2 [- F# V" `- c5 X9 j1 n/ |# f9 \( y2 f您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
( c: {5 l* [! ?. o8 e* ^247024 Tools Included with the Microsoft Windows 98 Resource Kit |