对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。
" R* S0 z" A9 H
7 ?6 V7 J. X3 z: R8 XRegsvr32.exe 的用法 * S6 W/ j/ Q4 c7 T. z
+ r* d' ^6 D5 q; J8 Q# t6 ?3 P7 p+ DRegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname 4 k, `. `( M. n2 V' s
& w" `) S0 J) v; F /u - Unregister server<BR/>
9 X1 ]' |. R- x3 | /i - Call DllInstall passing it an optional [cmdline];
/ C5 P' u* h2 K) L. V when used with /u calls dll uninstall
. ^" r( R* W$ M6 |1 M3 p /n - do not call DllRegisterServer; this option must
7 x! ^2 y; E; p: q: P5 e be used with /i
* J8 s3 X/ B% \; B2 S
$ J2 C4 q: r3 L3 w9 q) }当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:
$ J# N* j8 [. ]/ {5 \http://msdn.microsoft.com/librar ... n32_error_codes.asp
2 t1 T7 _0 H% Q, q
3 l$ |3 B" T* H, F [$ H例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:
$ [3 Y# ]5 W' W0 g8 k1 {5 d5 Gc:\regsvr32.exe sample.ocx - b# A% c/ h4 P* u3 k8 V
! u2 t/ {) {! k# C" {
Regsvr32.exe 错误消息
2 i" u& ~' n$ W' N5 T7 T3 z3 A( Q
以下列表介绍了 RegSvr32 错误消息和可能的原因。
' t" U' _7 Q2 _+ K% {2 l K) y: E! D# I7 l5 S# i1 W( k* v
Unrecognized flag:/invalid_flag
' p8 K: Y3 Y _; V
& ~) ]" ?, S" r* d7 x键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。
8 k9 ^, X. A- T6 ?( @! S: g/ t4 x$ T1 F3 |: x9 e5 ]
No DLL name specified. % b2 L9 ~9 ]" s n. h v8 [
; A+ a" O/ \: |; E. f& _未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。
4 `2 V" @7 f7 J0 }; l% V% ~* Y# K- ~- C! X) `7 [# d
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
0 O9 [: }1 t9 g) i" g0 B
, Z/ p3 M. G+ c7 XDllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。 8 z" x7 a% B x0 A$ M/ X- E, N
- S; A7 T/ I2 Z' F; V: ADllname is not an executable file and no registration helper is registered for this file type. . ]! K6 g, n$ x9 \
+ \) o: F% f% R# {
Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。 / b' Y# K& m4 m" f4 k$ c( T
& e' l& u, _* `& [
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
; H5 E2 {* }3 ~4 m0 l9 e( D8 T( ^" ~& w4 Y1 f% R0 L" u) M Q$ z" T
Dllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。
. a( s7 v1 j' }/ e Y
7 p' c. y& J$ N$ M# c- JDllname is not self-registerable or a corrupted version is in memory. & e/ I/ S8 g0 _: o* I
( ^5 B0 Z& g0 b3 Q7 G例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:
6 K& e+ m- G: C& U2 ~197155 如何终止孤立进程 * _$ e* M3 M8 S4 U+ {' @: D" M
' G- q+ w$ Q6 j2 C+ o8 iOleInitialize failed (or OleUninitialize failed). 5 q& h7 r1 \# t$ Q
. _# [6 B4 u" A% K) DRegsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。 , r" X5 f) f: L# ` D$ V& A
3 A" Y( C* Z- x2 P/ y# c" P ELoadLibrary("Dllname") failed.GetlastError returns 0x00000485 & i, i, B% {! s7 \! y n
. _( _+ O( N2 @% T
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。 7 q. w2 ?. \1 M* T9 H' ^7 e1 O5 `
/ R5 y+ c' v8 P9 u6 E% a' C$ x0 LLoadLibrary("Dllname") failed.GetLastError returns 0x00000002 . f, V3 z" |. D6 q( n
P6 ~8 o2 x! J在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。 : {" f8 d$ m" c9 A6 r
( ^1 F( n! C) X: ^; T- J3 eLoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f 6 M' T. C5 V$ e) w; B
" p5 B6 Z6 v! M: _% i) D
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。
" N& z9 X9 s, r& E0 j2 W
3 G! ]+ s8 p! s7 gDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串 u. K% o" Q5 P! \
. s( Y$ W/ G/ }) e6 B在 Winerror.h 中搜索字符串。
& |$ T$ W: K2 _3 dRegsvr32.exe 和依赖项
, [7 [5 i" y9 C% m: e3 s( sRegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。 " D5 j3 G! `- b: r8 s# e
; m# T8 S* T' P4 J6 R3 |) p. B您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
' r1 n5 C. B& G% I( n* ]& W247024 Tools Included with the Microsoft Windows 98 Resource Kit |