对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。* l2 C |* G. P% J1 O, k) k
8 _* y a2 G: }* x, [& sRegsvr32.exe 的用法 # o+ u+ s+ K8 T ?% l
2 P* U2 k n, r, J# ERegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname . \4 ?: Q* h/ V8 `; _! w
/ S( M- Y* Z! ? /u - Unregister server<BR/> ) C4 Z9 J- |5 _. b. }# v
/i - Call DllInstall passing it an optional [cmdline];
2 x3 C) Z+ k- `8 T, e6 e V( A- J when used with /u calls dll uninstall
7 W) c* C: f5 e: O /n - do not call DllRegisterServer; this option must 6 s6 ?3 T2 i( z0 G5 n# y7 J
be used with /i
8 d9 n3 \0 S* w) ^6 m) x1 ?4 e5 M
% | Y. c$ T# C# O7 H+ J9 F当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:
) `6 s# A& ?$ e! G$ w9 R( F2 hhttp://msdn.microsoft.com/librar ... n32_error_codes.asp 0 u! h. v: K. I
7 d7 y, `9 k6 m6 e2 i; F! Q, l例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:
* ]$ c/ z& F+ ~: E# j' hc:\regsvr32.exe sample.ocx
: q/ N- E" z) |8 R4 g" e
* o' v$ a' X0 m1 T, c) E5 rRegsvr32.exe 错误消息 1 M# v8 d# ^3 z; U3 m# o
+ ^- C K; ]; D" U3 u- y) B' G
以下列表介绍了 RegSvr32 错误消息和可能的原因。
9 u: `/ q* V4 y f' Z4 @! r& }: j# X( S2 j
Unrecognized flag:/invalid_flag
. l. o; E9 w+ g. N* m& K5 G6 p' K8 ~1 P/ J& m
键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。 : r; H) u8 j8 L
$ I7 D$ H% ^* T! t" I m. o
No DLL name specified.
8 D4 u, W$ B8 L7 \+ @$ W. w
* i& g1 ]# c+ k7 P: g% l9 E0 {未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。
# p1 r2 A! s1 p( L& Q& P |3 G1 M
7 d3 R; f0 L, N4 i; c4 Q7 HDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. 8 j, R( y2 w4 V4 M: M
- k% [# a# E3 `0 @7 C4 h, t" Q
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。 " N, ]& N7 U3 P- A7 u9 g; R
( w& K4 y8 O0 m0 b2 @Dllname is not an executable file and no registration helper is registered for this file type. # S! e) R8 T/ G8 t0 R% Y8 y: q. b
* Y$ S, T% ]; \4 }8 h, V! d5 t
Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。 - _1 | ^% v$ I! P
3 N- w6 n! i. H( Y
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
0 I, M3 A. v4 X p/ [% _$ t. k/ m6 E2 X2 j
Dllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。 $ V9 i/ `6 y! d+ Z/ y9 l
$ L( i' P* ], GDllname is not self-registerable or a corrupted version is in memory.
" v9 ~" P; c) I, P A9 c( e' a; H7 a1 A* {
例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:
1 t U: }$ m; s% V/ w( |197155 如何终止孤立进程
- i/ V2 X j! K/ U- L- K* q. g; v" F6 O+ a$ f. w: m0 }: I, O& u; j; u/ G
OleInitialize failed (or OleUninitialize failed). 2 _; P; x2 U- Z: R: j
|, H5 q( f9 I0 Y3 W' `0 n. yRegsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。
9 g0 c9 x- M& {2 D
# E/ ?8 e# h; r7 jLoadLibrary("Dllname") failed.GetlastError returns 0x00000485
# W3 E ?, ]6 {0 m1 M& G c0 k8 F
' W7 A1 `. G3 \! V. `在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。
M; n9 c7 t c! N3 Y7 ^
, \" l) @2 B8 M( E: q8 iLoadLibrary("Dllname") failed.GetLastError returns 0x00000002 ) ]1 H; ]2 K. B/ p: f1 `
5 D6 L3 Y$ R' C- Q1 _* _" ^# N
在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。 $ M1 f# X" Q8 T- u8 o, V* }
, g7 k! k$ c9 D& ? |" x" [LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f 9 P G2 B6 ` y8 |
( V5 c2 Y3 q$ p# Q/ q6 ]" ]在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。 $ S( \9 X" o! v
& N) N- n) m! Q7 yDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串 & U/ [- t. F1 d
/ y U1 [+ P% h, y在 Winerror.h 中搜索字符串。
|. }% O; E( Z7 ^: M/ i; jRegsvr32.exe 和依赖项 ' K, j6 c5 C% E( @8 N
RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。
+ I, L% _+ d* Q* H5 h7 d' X& n6 z0 F" a" B
您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。 ( @2 `& ^; y6 J) j0 I
247024 Tools Included with the Microsoft Windows 98 Resource Kit |