对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。
: o- O2 p) ?$ W& }- a+ h: P0 s; R
4 ~0 g& u1 J. z& o' m$ ^Regsvr32.exe 的用法
) I' L' _$ j0 \3 P' O3 B6 r5 ~/ [2 h2 a; p5 s0 }0 c: ^8 |
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname * V* i4 a5 b8 K. z: C+ K
( g( A! K9 q6 A( \$ w9 | /u - Unregister server<BR/> 5 z0 s& a3 P( I) ? E
/i - Call DllInstall passing it an optional [cmdline];
1 S: x$ P) F9 k( Z5 G9 b when used with /u calls dll uninstall # h9 E9 z0 ^) y( r& H/ n
/n - do not call DllRegisterServer; this option must
% E2 P! A8 p0 b- c5 z! b/ C be used with /i
* |6 ]. z+ ]- }7 ~7 k
) y# g; i) y" b2 B* J* |& s: {$ c当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点: $ k3 f& ?: w" _+ D- W* V7 \9 D
http://msdn.microsoft.com/librar ... n32_error_codes.asp 5 D& v; _9 S& s/ t0 t$ q/ |( R
5 |+ ~* [' P" {/ D* p$ }8 j
例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:
6 ~9 L- w X; {( _. t- i& F. U: X1 Oc:\regsvr32.exe sample.ocx # l. _5 _ s+ \3 _3 J0 n" c m
6 P% N4 s( F e6 q5 B) R# {
Regsvr32.exe 错误消息 r2 ^/ z' A' f
5 U# ^: G+ x. {5 s( E! C, g% Z
以下列表介绍了 RegSvr32 错误消息和可能的原因。
* k5 W( n. p0 l2 i7 M5 P1 g( w# Q& d2 U% Z
Unrecognized flag:/invalid_flag 5 a: O% c8 B. o# m) W
3 e- [' z1 p4 x! K
键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。
4 u/ K+ H* c k/ D* O$ G) }7 u4 R' e
No DLL name specified. # ]# K: c4 }( ]7 o$ O
% Q3 g* J6 _5 l2 C
未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。
8 c! O/ T6 |5 O# c+ q& j. Y( `; s) y$ s0 j% K5 ?
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
$ |& }" a2 r+ j/ e$ k* ]+ g! p( Z" U- O. E3 U6 Z1 g6 b0 W
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。 , ?* n. \) @' y _8 ?' j5 a& a G) J
* {/ |, i$ u$ F- C( {. O; X8 d
Dllname is not an executable file and no registration helper is registered for this file type. 2 N7 ^$ L( h, J( ^, ^, e9 O# Z# A
6 D; W, z: D) [4 T( E4 ZDllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。 , D% R1 G6 n4 F6 p
1 S+ C- f+ T! x9 T0 i: m6 h! l
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
, `" C' P, a( X) E
+ Q5 g5 t* g0 h$ p" hDllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。
8 H+ A( H8 S. L+ S
3 s2 F! r3 N, W* x" bDllname is not self-registerable or a corrupted version is in memory.
2 X& x' c0 h6 a/ O/ h2 f- C
6 g* Z& W3 X3 q) ~例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章: ! L* o% O5 v5 q" @1 N- L7 v- k0 P' x
197155 如何终止孤立进程
+ ], I/ p8 w4 Z# |) d. Z" ` E: s- b/ Q4 V6 h3 ~) W! G2 w
OleInitialize failed (or OleUninitialize failed).
5 L. p5 A7 J6 D: ^1 Y" k& L+ \" t( \8 N
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。
, x# Q% }. ?, ], |6 X
; ^3 ]+ c; C. a3 A' i1 F W4 q% D. JLoadLibrary("Dllname") failed.GetlastError returns 0x00000485
& W5 U$ G( b8 m1 n' X
2 P: r7 d9 E7 F# H8 K2 p在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。
% U3 f$ V( j$ `5 K: P/ Q$ i! [( @5 Q, m* n3 w' j: n
LoadLibrary("Dllname") failed.GetLastError returns 0x00000002 , l- k: A2 a0 }1 B) w# H) {
/ J) ^' n& i$ N" o在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。
9 `9 z8 D/ h- W1 U4 B1 Q) e8 c. U B7 Y# u& E, _/ ]! d( b, m
LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f 2 t6 N' Z" e; a- `7 z6 h" e& f, V
; a. d- w& @. O7 b2 ]% X在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。
' d) t' H3 ?! {; }1 N2 R3 q! J/ i( F9 e% U0 ^4 R+ }, X( E
DllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串 , l' i# C9 H; H4 ?' \" @
- _1 r4 g+ Q& Z5 ^; D$ `7 @
在 Winerror.h 中搜索字符串。 * C0 q% p1 F) K% p3 q
Regsvr32.exe 和依赖项 ( q3 v: h2 r, R C/ E7 I: \
RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。
( \$ K' u: ^9 a/ H# J8 }7 C* \- o& M7 d/ n: w7 s
您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
( F* K4 t- b3 ?5 Q! R247024 Tools Included with the Microsoft Windows 98 Resource Kit |