对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。
% p1 _. L7 ^6 Z& o% {. e
/ `$ X5 M6 U+ u% ]$ j* h* IRegsvr32.exe 的用法
) X( K* a2 b2 q9 a. H4 y2 J
( ~! _% i: L- A/ y2 C+ @RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname
# N( \# ?' o" g6 z7 b
% z6 b' |* d; ]# _* I8 a { /u - Unregister server<BR/>
! p2 T j8 V* G7 R d/ Y5 h% B /i - Call DllInstall passing it an optional [cmdline]; 4 b s3 w: x v% F$ C/ P" h. [& j
when used with /u calls dll uninstall ; Q9 l2 q2 g- I
/n - do not call DllRegisterServer; this option must 3 m$ P7 V! M0 N9 x+ e
be used with /i
0 H( U& J+ @' w- Y; K% o
4 ~% l3 v( m& Y2 D( A9 a当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:
/ N3 _, q7 S1 o; ohttp://msdn.microsoft.com/librar ... n32_error_codes.asp
) {, h, K( _) U, Q2 t; _% \
. O& p! r( n2 ? X+ _2 L& Q5 o/ k例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:
+ b' x1 P2 I0 W/ }c:\regsvr32.exe sample.ocx : B7 R V7 U2 L3 M2 x) l1 n; D$ n) S
1 N5 @6 p- V2 q) W3 D
Regsvr32.exe 错误消息 - A" _( n$ w" m7 z0 C2 P+ y
5 p' f; L. _7 U+ U以下列表介绍了 RegSvr32 错误消息和可能的原因。
. w+ z+ t! M) K- v, B$ |3 Q$ c
6 J9 f. B, s0 I( J5 V. H9 ?+ rUnrecognized flag:/invalid_flag 6 k. ?" q5 w& ]3 v$ b }
5 ]6 d" t4 d9 Z$ p
键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。
5 [3 O. q5 o4 y% p& j
3 p: _& {/ \5 N2 B, w4 q! @2 uNo DLL name specified.
0 E, X: L1 k7 V' [* Z! d' K) U
7 R/ c. C0 d% ?未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。 6 Q v! |% L- y" w
& _( l& ]8 a9 G3 _4 k, C5 K' n
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
: g8 V& \" X, |3 F* V& P* ^! T( O6 L
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。 : T/ v4 ]4 B# s3 c6 Y
4 C& D/ F& X( R1 x* w; z j; hDllname is not an executable file and no registration helper is registered for this file type.
" s- H- I% |* Z! E' C) o v" H( Z& Y8 s( Q) H: Y3 g5 P
Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。
9 @4 w$ |+ T( D/ S r& V0 {' r4 q% I2 \' l
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. 2 K* r* q% \* w/ |* t! p% o U0 P
) s/ L) E) \' T) {0 t% _3 iDllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。 6 Y! R( e5 m0 I) z9 [
; m1 D; l) H3 d8 Y9 YDllname is not self-registerable or a corrupted version is in memory.
6 U+ d; c: T! x7 o$ p) x
0 t9 L3 c9 c8 B, M例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:
4 }5 y3 u/ t. c. A197155 如何终止孤立进程 $ a0 E/ [( \* D: p9 q
0 }/ R+ I$ Q; j) t
OleInitialize failed (or OleUninitialize failed). # \; o1 _* F9 g$ X$ i* z8 c+ n9 H
& E, \ e* `8 x4 n) O' H8 o7 q+ Z
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。 * D3 Q- d: t/ q- x9 k( q+ V+ i
' T" U# A/ F, U" x$ Y7 d" yLoadLibrary("Dllname") failed.GetlastError returns 0x00000485
$ J' P8 G$ \2 x, z4 n
+ d, C! U% X4 ~1 |$ g; e5 A6 q在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。
. a4 l# o; D e$ U0 W1 L, `% r( Y, r$ Q1 G# P8 D, [
LoadLibrary("Dllname") failed.GetLastError returns 0x00000002
2 ]2 C0 v6 ]# u$ D$ b6 r" M# t; Q0 A: x) g0 |- h( Q. ~
在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。 ) k7 q- k, g+ Z7 B, o% g% D
0 e' O5 K$ G2 Q s* P
LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f
* N, {/ a5 X+ Q5 r$ k8 p( a8 T4 S0 _7 u5 S. X' J% c9 e
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。 3 w9 T- l% @- x+ K: E* @
+ U4 `; g% W6 Q! O: u: J p4 t
DllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串
& r5 A" ~( C1 b+ {
8 }, n: V! z/ Y& w6 \在 Winerror.h 中搜索字符串。 , [7 r/ U2 n3 J' ], j6 `% j
Regsvr32.exe 和依赖项
( G% L. D% I5 NRegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。 : X* v3 w3 U& Q+ i, U/ A2 Q
8 F9 ?) F+ E4 B# d) P
您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。 . F) v ?3 B: ^6 }, O6 v! _& u
247024 Tools Included with the Microsoft Windows 98 Resource Kit |