电脑互动吧

 找回密码
 注册
查看: 8858|回复: 0

[技术资讯] Regsvr32 用法和错误消息的说明

[复制链接]
发表于 2013-5-16 20:01:25 | 显示全部楼层 |阅读模式
对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。  U$ b% R& F  k/ d; A9 x
' F6 F3 `3 E4 `2 ]5 Y
Regsvr32.exe 的用法   n' _6 y/ l, W/ T6 Y7 l5 h. U
8 C4 W3 j$ l# u% F+ O- s: K
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname
! ^/ |% _; w6 M# z  a: Y
2 Q+ p" @# h& M) |   /u - Unregister server<BR/> 8 l( B$ E( m) _. b( h; @3 v
   /i - Call DllInstall passing it an optional [cmdline]; ) j: `; J4 b9 ]* I' p2 e4 p( x) h
        when used with /u calls dll uninstall , O; L+ t8 ?& p3 F
   /n - do not call DllRegisterServer; this option must 9 ^  w; i: X0 [! P  t8 q' k
        be used with /i ( [( z' ?1 P' o# V

4 O3 d3 j& Z3 m% X当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:  
% ~, V% K$ G1 v" x! \http://msdn.microsoft.com/librar ... n32_error_codes.asp  ' L- |% |7 I" w2 S' c  |! Y7 u
# E/ m9 A2 B: d
例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:  
: D. d% X+ `  ?5 Q9 M6 A9 Nc:\regsvr32.exe sample.ocx
8 W, b" g' h7 F: \, s1 p! X, m& c+ Q7 ]0 j
Regsvr32.exe 错误消息 ' G/ ?8 r* T7 Z2 s9 S6 g$ H8 e0 x
7 I, j4 S6 Y3 G; `
以下列表介绍了 RegSvr32 错误消息和可能的原因。  $ O+ r9 B9 A, _0 Z/ E, D

; A, h5 V" l! W- ?+ YUnrecognized flag:/invalid_flag % q3 G- c* {& N2 j' E( {9 a
5 O. k* `* Q; x6 J9 ^/ G; y" O9 ~- ]
键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。  
2 J- p1 W- r0 N2 \2 u
4 w. I/ X( L6 j6 g" w% VNo DLL name specified.
- `) `! q! W4 S1 f( j5 C
" Z8 p9 ^- d3 U( i未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。  
/ C/ P) {* Y0 T" k8 G
& W, v3 P3 f' w' l& \, B+ O$ h  m) tDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
# V0 h8 ], k0 j( Q& u3 z6 [1 D8 J8 l0 o" a
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。  
9 F8 {( ?" d7 b) ^9 L) w$ L! L& \0 i, e) J$ F: V
Dllname is not an executable file and no registration helper is registered for this file type. % s- n: E, j  Y( v# R8 m: m9 t
7 y& r/ C" d3 K% f- o9 |/ x4 q
Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。
3 g8 L4 x6 [' D0 S6 d$ D* Q# e  w1 V0 q, o
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. - R( {! |, O; a9 D$ o

! k* n. e. [0 |8 uDllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。  
3 e0 O& {; p- n0 u7 r! f5 W% e4 c  k' C. T
Dllname is not self-registerable or a corrupted version is in memory.
$ ?. J9 X& z4 u+ t2 {; y8 ]: a$ E# n; `
例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:  
3 X* m( g: k+ W. J; H4 R5 {) P197155 如何终止孤立进程  
9 A3 E+ V& A6 Y* p2 f9 m( H, R. u5 m- I$ b, D( J0 B
OleInitialize failed (or OleUninitialize failed).
% T! T8 ?0 e3 U9 N+ V; `8 D& L8 Z6 B  ~- X. O
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。  + ~/ Q7 S- C# t6 T. _8 h) U1 f; a- W
$ y5 X* W9 X& A8 _3 E8 K  G. Y
LoadLibrary("Dllname") failed.GetlastError returns 0x00000485
. ~9 u* a& |( K5 _& z" s( W1 l* I# j& d0 Y* q, U* c/ ?
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。  & q" B& E, D# X
* N, _( w, N1 F& _
LoadLibrary("Dllname") failed.GetLastError returns 0x00000002 9 V9 h  h+ V0 l

5 @' }8 i$ T8 l, z) j" U9 h% `在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。  
% ]1 C# ]8 r8 F
& @/ x, m4 Q" xLoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f 3 }7 A; d/ E8 d6 h
' `9 g5 e+ h- K# ~: D9 y/ g. D
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。  3 S# a! f: k% P1 I$ x  h
+ N- Y0 R! U( R9 S6 U
DllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串 . b4 v# T3 X1 J8 m- _
0 Z3 f5 ?# U7 u; e/ t- c
在 Winerror.h 中搜索字符串。  & r$ |9 p3 d6 E. K6 z! X* ~+ J. c
Regsvr32.exe 和依赖项
0 i6 ~2 ^3 C0 aRegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。  
8 a* [" P! ~  Q/ J- {2 X! W; [  w) O& r. j1 t
您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
1 d8 z% O4 C- N247024 Tools Included with the Microsoft Windows 98 Resource Kit  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|手机版|小黑屋|Archiver|电脑互动吧 ( 浙ICP备13037409号 )

浙公网安备 33032402001025号

GMT+8, 2026-8-1 07:07 , Processed in 0.058327 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表