对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。
- p1 F: S1 f6 e; E, K! c+ A" I b5 h/ E
Regsvr32.exe 的用法 ' v! G- Z0 V4 {8 o
) Y) N' f! O1 Y$ E5 t' r& b6 d
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname
( r- w; o* L9 R3 {+ l% `3 g! n
6 R! M- d& W/ ~, X /u - Unregister server<BR/> + q S; c+ p/ ]; v5 B0 L$ w( i
/i - Call DllInstall passing it an optional [cmdline];
& M6 ^3 W0 m9 y1 j- T when used with /u calls dll uninstall 1 ]" _7 ?3 D2 |9 ~' U1 W$ Y
/n - do not call DllRegisterServer; this option must 4 z8 ?; S4 ]: k1 F' t8 o
be used with /i & }6 u+ L* y/ a( o- M% ^$ j) T' J
) i! l% v4 A3 N$ O( f6 z当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点: 8 W4 D& [, F9 L1 H9 k
http://msdn.microsoft.com/librar ... n32_error_codes.asp
, } w# U7 H1 e$ b8 z0 p8 b O+ w$ I2 h
例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:
( _5 u- u/ w0 n& D8 A& u6 p- Fc:\regsvr32.exe sample.ocx 1 D( `" m U4 `7 H2 J& U3 S
; K i5 ?3 c% U+ L- _Regsvr32.exe 错误消息 T) p) V; A* w Y& ^& d
]1 h I& S" F& o/ ]* P- c
以下列表介绍了 RegSvr32 错误消息和可能的原因。 0 R( e/ N# Q7 y' |7 O
3 {' w6 ]- Q% Q; cUnrecognized flag:/invalid_flag , k7 C1 l) S5 A
( Z' ?2 o! k1 _/ R0 z% l3 Y
键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。 # n2 q# A: C8 s* U
+ O) B ^, E( v- g; q; ^/ D0 I( LNo DLL name specified.
: \. D0 u9 K; h
( o7 H* {) v: a/ U1 T6 Y; M% _未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。
7 B7 y4 k) d) w* z( n# |
0 g/ @7 Q! E3 O- y' M% CDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. " h+ g( v& S5 j! H" T* g8 O
f/ y- i8 a( E: _; j8 iDllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。 - O' L# o D1 |2 J& Z' E
# w7 b! _, G: d; }4 d) o0 z2 j
Dllname is not an executable file and no registration helper is registered for this file type.
0 u0 a$ E" p3 {# o8 m
6 ?3 Q5 U6 W6 F+ M {2 [- x) FDllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。 1 i! |2 R0 _* M! K! P- B" T
, \' S4 n2 _& C1 S9 j
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
% _7 m, a* w7 z* I/ o9 E
6 u: e, k" ~- X/ E6 ] X( ]Dllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。 ' _* Y9 Y; w3 P( W B& n8 {: k# ^
: B" m1 v3 S8 Y. V- V& I; m
Dllname is not self-registerable or a corrupted version is in memory.
! i6 E+ e% N' G+ w5 @& `: w7 z" }8 {5 `5 G* S; ] }9 o) g- w h2 u
例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:
, b( e, F$ r- G8 G, T8 }$ y197155 如何终止孤立进程
' R7 Z; F$ E* p3 {/ w; |* H7 L
- z. ?# [" a9 Z, |OleInitialize failed (or OleUninitialize failed).
7 H. u: D6 V; M6 ]3 c) \6 \
3 S c5 B3 \8 H9 ^3 v1 G, [, jRegsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。
q+ g3 I# r, u G$ ]% e0 g y
1 {3 ^+ D. r1 u1 N. w! FLoadLibrary("Dllname") failed.GetlastError returns 0x00000485
# t! k2 r7 U7 [ i" H+ H% a
- d8 l! e9 Z m% K在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。
5 X/ C: a( y/ y, z; }. b! n; `2 U2 \5 A' z ]
LoadLibrary("Dllname") failed.GetLastError returns 0x00000002
/ M3 k0 g# e1 i- S( D
0 t7 S4 ]" Y" r% T$ @在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。
* m% U6 h# e3 F9 ^: y! W' R& d6 R" n# D! g
LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f 2 V' Z* y- M! `7 B
+ k8 Q3 v, o& W) T* y; q, P# j
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。
- @* b( P; } L" u. ]# o& w/ z! M( U
DllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串
! a- A9 l7 R* v+ h' s1 g* @
5 L$ W& X) l, {0 `( p8 ~: f在 Winerror.h 中搜索字符串。 2 K+ G5 f. ^7 s6 X% m/ H
Regsvr32.exe 和依赖项 0 q' K7 _, @- t* Q6 D: F
RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。 % m# z+ x6 D4 f
, T4 \- v2 @' k* {2 p' i您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。 ! P T1 K9 `' v+ K
247024 Tools Included with the Microsoft Windows 98 Resource Kit |