对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。
+ t( W+ L a' _, P
( w# i- [6 E4 ?2 H- z' ZRegsvr32.exe 的用法
8 s1 L% e9 d4 r) N: ^% g' p) i' ?5 i- {: L' g* R
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname `% j/ ~& e9 n' h7 U7 W4 B
3 [1 G8 d7 J7 L8 s+ D: B6 D$ N$ r /u - Unregister server<BR/> 6 x6 ^& n) q* z$ f& [
/i - Call DllInstall passing it an optional [cmdline]; ' \4 e" E# x3 B! A$ o6 D
when used with /u calls dll uninstall _& g! ]- F, V7 c5 K- |$ N
/n - do not call DllRegisterServer; this option must 2 o: W0 f1 b2 Q: h7 P$ E/ O
be used with /i
& \9 Q( ?6 K! | R' X4 ~# T
" J/ \! o) d" o& ^7 v& X& v当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点: 3 u0 b: Y0 ~/ }' y: U
http://msdn.microsoft.com/librar ... n32_error_codes.asp
* f4 U3 N7 L# A: X' ]
6 r) e/ N( \; \% h! n例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:
$ {, h1 l4 k7 a' m3 Tc:\regsvr32.exe sample.ocx
% r* l0 O! o; D7 D, B: m* k) S2 l9 S' p9 J6 U( p$ [/ \ ^+ a0 k
Regsvr32.exe 错误消息
. F' Y- z0 t/ |* q! b4 i1 D. `6 f) n7 a4 C! k( x9 T& X
以下列表介绍了 RegSvr32 错误消息和可能的原因。
6 M1 Y* x7 I7 l5 f/ Y, ~# Y' U1 ?8 g
Unrecognized flag:/invalid_flag 2 w8 C$ C5 L( S! `) r
, h7 g. }0 y! {" c: {
键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。 ; u O5 G8 A6 c4 J& c. q
$ d j3 y1 T7 V3 I- ] v |$ @! C+ A
No DLL name specified. ' r& t" R1 X4 v0 i5 ^; t1 A
+ Z" E* {8 X- H0 V9 z3 y5 C未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。 7 F- b9 Q+ ?- X% a& z
+ k3 Y4 o6 Z8 ]7 o+ pDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
7 d7 ^6 u( Y; o# b7 s9 K$ s' w2 n2 Q0 |
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。 t0 c1 k/ B w; V( Z" ^5 ^# M+ E
/ k9 G. m/ T( [0 s
Dllname is not an executable file and no registration helper is registered for this file type. % l$ T2 x X( e* j) [
/ J* m; [1 ` H6 w; Q" u
Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。 5 {# A5 v+ }# l( U) x3 q! I7 y+ Z
9 t+ m' _- w, O1 A9 W) |% z5 I
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
: E9 G) `$ p/ I4 u
) ]" W6 \7 R0 W6 C0 VDllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。
7 ^) ^9 `* S" c# A4 r# d& t4 @9 t" A# K1 F
Dllname is not self-registerable or a corrupted version is in memory. ' \( M, b$ M4 V/ O5 Q
( Z4 s- {9 S- u
例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章: ! [: \' T* n. W! k
197155 如何终止孤立进程
& ~: e4 R) F V# C+ D T1 c8 Z: ~5 J" D% k
OleInitialize failed (or OleUninitialize failed). # _* i8 p# b8 ^
8 q/ O+ v1 Y2 U- y/ h) U7 ~5 ZRegsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。 8 l0 a, j/ F. ^
+ X" i, ]6 K$ _4 D/ `1 i, CLoadLibrary("Dllname") failed.GetlastError returns 0x00000485 1 d% b" B6 ^8 v( |. u8 p1 [* ?
- [) u# F. S$ `3 W, f& ]在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。
* ^9 h( i k6 ~* `& T
* I$ t# G; E$ m- k; O6 Y, n- P, a( ~LoadLibrary("Dllname") failed.GetLastError returns 0x00000002
# h. C9 [1 _, U! y# a* y6 L' w$ D8 y
在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。
! Q% _/ }) z, ~! _
( @% Q& l* Y. v$ HLoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f
# H; e3 Y$ K/ ?; R# @( l T9 }: {% s; y7 e; [6 B3 Q" K9 n7 Z/ p
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。 1 e. J) i' x# R5 P5 f
. C: u1 e7 z6 L/ F6 `: v
DllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串
' C$ i: D/ o. o4 Z# X6 d, I1 ]0 M! v3 Z$ Y q8 T* F
在 Winerror.h 中搜索字符串。
% L3 B% A* @' {Regsvr32.exe 和依赖项 7 s' l. V- d1 x8 ^0 x6 g
RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。
" n0 e% P7 ~# c. ]
5 X- @% n, L) C- e& S您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
7 W- n; G6 {: ?247024 Tools Included with the Microsoft Windows 98 Resource Kit |