对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。
7 q9 I K5 k; g, U3 V4 ~( R8 ~* G" I; n$ ^6 N) b% F& l: |
Regsvr32.exe 的用法
5 L# F$ B9 x/ T0 x2 G' |; j* T5 V; R: a+ G$ f9 }2 N
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname 6 M$ S$ T* B9 e
6 n0 S# F4 B- d# S/ D0 Y; ?, G
/u - Unregister server<BR/> + o$ W) k% @- M( x- ]) K" _% P
/i - Call DllInstall passing it an optional [cmdline];
/ U, K( X! ~) N6 l when used with /u calls dll uninstall ! B0 ], h N, W
/n - do not call DllRegisterServer; this option must
* p6 O1 w, R: i be used with /i
5 L& w, s# h* H/ V- G: ?$ E1 Z; b; W. ~$ m3 P
当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点: ! K4 J7 q. j# C0 `+ q) h
http://msdn.microsoft.com/librar ... n32_error_codes.asp ; q# p' V& s" v* t" H
/ h+ l6 c" A, _# O$ |- O
例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令: 8 I: @- f+ {" @( X
c:\regsvr32.exe sample.ocx
) V4 u: P0 F4 o8 ~& \8 N; A6 M& ^' e. g7 A+ e4 p1 u# B
Regsvr32.exe 错误消息 $ M+ m U* |8 [* `6 v
( ]' R- s) ~4 h0 k S' C% K- S+ a
以下列表介绍了 RegSvr32 错误消息和可能的原因。 . ]. y+ G- x6 r% @
# q' q/ D: U1 |- |6 f8 n! v, M
Unrecognized flag:/invalid_flag ! e9 C3 Y. T1 \8 x
5 _6 X, c# I8 P Q# x键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。 + |. K: Z( e1 `" `! d+ ^0 ]1 ?$ I
6 h2 {, f: `( d) E3 ?* } `# ]/ uNo DLL name specified. / I/ _% m, Q! [) T1 K
9 q7 W1 P5 Y7 U9 v未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。 f# \: J7 F5 g, p! U) L/ \ i$ g
$ B; H8 Y9 O8 Y" f/ {- Y( R
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. $ e4 U6 U/ A9 [# S7 J7 h! y
( h6 s/ R; r: Z; n
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。
( N; |: T8 L: L$ L3 j9 {/ r* J5 b4 c9 l
Dllname is not an executable file and no registration helper is registered for this file type.
2 g! _# r" Q* r' O
3 ?/ J; w3 J, w; B7 b: |. jDllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。 " {* S' _0 s f5 Q
+ j/ R7 [# r4 H$ @) k1 S/ D t4 F2 M
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. 1 b2 V/ [& {; f' J/ ~! f7 d+ l
3 y5 O8 k( t$ z; c) aDllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。 - K' Z B# t1 e, E7 ]# Z0 q
5 Y: }5 ]$ W- N- f w B
Dllname is not self-registerable or a corrupted version is in memory. 4 B- g# S9 a1 }. X" S8 v5 X! b' a
% w0 D3 A( t3 @! ]例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:
) F) f- t9 @( v& q# i9 Q) C197155 如何终止孤立进程 4 r! N) O. h$ N) w
* L! Z1 N) J: V# jOleInitialize failed (or OleUninitialize failed). ( v1 J% y1 w {/ p: ]! [8 M8 o: F
7 J- N" Q2 a& \# }+ @. SRegsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。 , m7 _$ }( u% ^3 E
4 f# E, e( [9 l' Q- R) `% s+ ^
LoadLibrary("Dllname") failed.GetlastError returns 0x00000485
7 ]( F: D; {: _- Z' O+ M2 u$ }: Q0 c+ z" l
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。
/ A: `+ V0 {5 ]% e& F* {. O: w4 R
LoadLibrary("Dllname") failed.GetLastError returns 0x00000002
' k" W t6 a8 G. F( X$ ]8 ?# s5 w, O8 ^6 w) v
在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。 . e" p2 Q8 M) Z& d, b$ ?4 s9 D
8 F+ O+ b( ?- g: G! k8 mLoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f * F$ P* |; h) X& x
: {* _8 K W/ d( Q, w
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。 + n% x8 d/ e5 y x" Q3 G& ]
3 d8 L4 b. i/ ?" t
DllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串
0 f. i* Q# Z4 {2 M: t$ s8 ~& y+ N/ j! F& C, ]- ?2 e$ g
在 Winerror.h 中搜索字符串。
q( s, P O5 }. R! X! S$ lRegsvr32.exe 和依赖项
5 U+ ], Y4 C' g2 y) `RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。
9 P% T& Y0 @7 q" s/ {& [+ ^5 l- d2 d
您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
4 _& B3 Z' Q$ z% i# z/ ]0 J& {( {247024 Tools Included with the Microsoft Windows 98 Resource Kit |