对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。
. w* h( ]! _, ]: T' c
; Q% ~. o+ S- H( \) n# f! f& K8 N9 gRegsvr32.exe 的用法
/ r8 e) L, u7 c$ B2 R3 C. V* y; F- |4 y
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname
4 q1 u& k+ N4 F, w& x6 ?. M' e: ~+ ~) n3 r
/u - Unregister server<BR/> , @3 w/ ~7 k2 v ~/ J2 ~6 k
/i - Call DllInstall passing it an optional [cmdline];
7 }; B: X1 m3 k when used with /u calls dll uninstall 6 `" X# i$ r3 b0 z* o6 |6 p2 T
/n - do not call DllRegisterServer; this option must
; @1 F; X1 a& L7 r" ?& o be used with /i
$ N- M* |* | F
6 @7 \( H7 l* t/ ^# V R当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:
1 f- s6 N, w$ K2 [( H: M" u: hhttp://msdn.microsoft.com/librar ... n32_error_codes.asp
A8 ^& W$ r! h8 \0 m/ d0 q$ t" F$ u1 Z7 H6 y% R
例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:
- c, }" E' }, e; D) E8 D9 G! c" Lc:\regsvr32.exe sample.ocx + S6 Z) C) O7 p/ J1 i) _- ?
' p: |* M6 L* J- TRegsvr32.exe 错误消息
' g& b( e- ]( v' O8 w3 H) x. }2 y; b. e" C3 d U
以下列表介绍了 RegSvr32 错误消息和可能的原因。 1 B* F ~, H1 E. q4 Z( z
5 V) V& w$ w: B; AUnrecognized flag:/invalid_flag 1 O' n# p6 \6 h
) K8 a, ?6 L( q* v0 I9 q; ~; I键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。 # e- b, R+ h' c
3 f& ~* d/ A) P* M
No DLL name specified. : A7 H4 `# r7 y. e& G8 X
2 t6 T/ u+ ?2 b( C4 S
未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。 ) o) s/ v I( I/ x/ p/ O& h
! k1 e* [! Y) b& x( ~( uDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. s1 t4 ?3 [2 z! E7 N. b
* j* ?6 _; z y; P& W8 g
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。 % {4 {; ~! K0 H
1 V9 q, e( p( V# T' e! b q5 V- y3 I; iDllname is not an executable file and no registration helper is registered for this file type.
1 V! r2 G2 f6 p2 O* e
' r0 F1 s3 b8 `5 V' BDllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。
) K% n: m9 P- T" E
- B+ ~5 z: m7 Q. e3 r5 Y9 JDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
% Q7 s, ?8 ~8 Z# U, \7 v w; o' w O9 ?5 G) G$ m9 b* y3 O: X
Dllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。 % F( k% D1 {* b% ? a
! I4 N8 ^4 v) _# ]: W
Dllname is not self-registerable or a corrupted version is in memory.
4 K4 D& ~8 Z0 {. P* m; v$ Z* _& K2 J
例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章: 4 T+ S! W7 F' l% z7 b3 h$ d3 C
197155 如何终止孤立进程 7 n7 ^9 ^4 X+ t; |9 r
+ T6 O$ S, K& q |" O" B+ _
OleInitialize failed (or OleUninitialize failed).
7 _3 W. K* y$ o. U% w1 h8 Y3 @ g& _/ ^7 Q9 ?' x0 Z
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。
7 y ?* u X) @. q, A( H
- E6 ~; z4 ~* q& Q4 `; VLoadLibrary("Dllname") failed.GetlastError returns 0x00000485
6 f0 P& V' K7 @; e4 M5 ^+ S: b: Q# m0 J$ y1 `" k l
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。
9 M' A3 X+ Z6 D2 z- W) x' j3 d/ ?: R! @: ]5 x+ O, Y4 h- q y
LoadLibrary("Dllname") failed.GetLastError returns 0x00000002 / k9 o0 k) Q6 c- N: ]+ ~
: p: M3 J/ W& A* Q( W, o在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。
1 d9 l* f4 f& y5 y. a" d: f$ {: O6 ]- V& Q# v) p
LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f
7 \0 s2 ~1 k) c1 N( K/ g$ T) v: F
! _. L; B: V/ ]" D" W在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。 7 i; p! r9 D( m8 w
+ G8 |: H. e" x2 |" m! ~3 s5 \DllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串
! A& R9 h5 [2 `' Q# U$ ^ B3 S9 N' b. n
在 Winerror.h 中搜索字符串。
$ x$ P# I! i5 I4 ]9 xRegsvr32.exe 和依赖项
4 S+ ^" ~$ w" t+ |# YRegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。 " H8 K8 A- \" L* ]1 v) `
$ r3 G: \* j8 L. b1 `9 H/ Y您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
5 E! a J. I6 x) U247024 Tools Included with the Microsoft Windows 98 Resource Kit |