对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。9 {+ ?4 A; B/ s, z
8 ~8 l) A4 e# k' ~: s
Regsvr32.exe 的用法
3 U; m9 E8 O- J% L l* n a: M5 G# C+ G( t
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname # [* z5 W* E, l, q6 Q/ D
1 I9 q" g5 F6 e( q/ e! A) V9 B /u - Unregister server<BR/> 0 d) m& M! C# V
/i - Call DllInstall passing it an optional [cmdline]; : X/ ^. k9 ^" q' k+ ~0 e
when used with /u calls dll uninstall
' ~5 Z4 u5 G. s /n - do not call DllRegisterServer; this option must 5 F6 i1 `" ^- ]5 ~: Y N$ `
be used with /i # j/ G6 t6 j8 B7 u! p8 ~+ {
) p. ]7 _3 r( J0 t) [
当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点: $ T3 {! V9 _9 ~, [, l
http://msdn.microsoft.com/librar ... n32_error_codes.asp 7 I: c v/ e7 P; e
% Q1 H( O. B$ ~2 m3 ~* B
例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令: 7 W5 S7 |. K. v! Y& k$ k
c:\regsvr32.exe sample.ocx
Y+ W5 A6 S5 {+ q) P) c& k0 b& y) [9 l! J2 I$ ?
Regsvr32.exe 错误消息 9 q. v0 v- p3 [9 |/ G _
- {7 q7 M% G+ O+ M9 v
以下列表介绍了 RegSvr32 错误消息和可能的原因。 1 D3 _6 g3 Y, T9 V0 T- i& Q* a
% ]0 ?; |5 O4 xUnrecognized flag:/invalid_flag
; h# m" K4 b% E$ X5 l" y
7 W& s6 J$ L9 a键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。
; n; V4 N# m6 C# _+ q- C5 w; ?- C Q( o* H* C/ j5 b6 K a. T
No DLL name specified.
" `# M( G; A, J5 o
( f; j1 ]' ~, ^/ Z( u未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。 w4 m1 o' f( ^9 J, e- f$ i; [
, I, v" O) L P0 v6 i6 t
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
; K, p: h' h. C, i! h7 l* Q* m" U) t
& n' R7 w+ n. f( I3 aDllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。 5 b! r4 A& ?# V0 E# I* q
7 I. ^4 W* z& ~2 n$ t
Dllname is not an executable file and no registration helper is registered for this file type.
) N) ?* ]: D1 Y9 n2 K( a, \$ F9 Q) p' a4 g
Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。
" Y. t+ ]7 t% V' @
4 z" I1 \$ P2 M: v" M& r5 O2 M: N0 ZDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
; q4 n; I0 Z. U2 G2 w( C- E) ^* i; b# q7 W2 `
Dllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。
3 F( A! Q* X0 x8 i; W4 _5 e3 \ o+ I6 a
Dllname is not self-registerable or a corrupted version is in memory.
. Z3 N: B$ G. ]# j. r1 c8 K# z0 j6 R9 \
例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:
5 l9 Z' \2 w: M l% Y% j197155 如何终止孤立进程
: E$ M* \# |; m, `! M, [+ }" e9 ^1 R# f# s8 A" g& j' G: e
OleInitialize failed (or OleUninitialize failed).
% o8 |" J+ u7 ^9 k- b7 D4 k% R# J1 @& V
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。 3 D& L0 l# Y3 B; e' A4 K
/ _: X) q* V) F0 ELoadLibrary("Dllname") failed.GetlastError returns 0x00000485 0 U- @: Q. n6 w, {- H
' a% }' n9 _$ ?! i
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。 " F% L4 |, x- Q3 Q) {; ^
* @3 m5 W/ g' w9 o2 Y) P& G" lLoadLibrary("Dllname") failed.GetLastError returns 0x00000002
) j/ |) I- O, Y, q. ]4 x T0 \0 J. ^ G5 W7 T5 a$ z
在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。 5 d8 t S) b( |/ Q" E
, [0 u$ u, _; D* [+ JLoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f & X" w) P6 x0 d- d* V
2 I ]: V# L* N: p6 o- W k: W
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。 " u! f/ {4 U: p& M) I
4 e+ i% R0 `" @# g5 u9 X
DllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串
! _0 F0 W# p' S0 K& w6 \3 a% l/ o, e. @# `+ |# T& b G0 y- R: c
在 Winerror.h 中搜索字符串。
& C: u( _/ w! E+ k5 W; S. RRegsvr32.exe 和依赖项 ; E# \4 q6 y3 G6 |+ ^ t7 q% Y
RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。
, `( l2 {* k. p: d* z6 J3 G. c& }3 C, H
您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。 ; f% f5 R, g) ]2 h4 j0 F
247024 Tools Included with the Microsoft Windows 98 Resource Kit |