电脑互动吧

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

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

[复制链接]
发表于 2013-5-16 20:01:25 | 显示全部楼层 |阅读模式
对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。* K: V, o7 f* D4 o$ A9 T
+ ], |" W! C- }2 V' P
Regsvr32.exe 的用法 . {) O' y* N& [+ c, N4 M- y* [
1 G3 M2 w0 c) U! @9 b. A2 I& q
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname % o2 Q2 F# ]. b+ G

7 R4 j0 P. F3 S   /u - Unregister server<BR/>
% C" o, f+ o+ y! p* ?6 i; c0 d8 J   /i - Call DllInstall passing it an optional [cmdline];
4 q* ?. D  M; c/ A+ Z        when used with /u calls dll uninstall
  e1 S  g& y/ x- a   /n - do not call DllRegisterServer; this option must 2 y$ Z2 o' [1 {/ H& S: n* ]
        be used with /i
, G. q  [! m) C: ^9 R8 x) P, ]2 @! `! E4 T- Z
当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:  
$ j" `6 \# ]8 ?( z0 Nhttp://msdn.microsoft.com/librar ... n32_error_codes.asp  ' X8 Y% A6 S4 E, V+ T% g
5 _: I' q( l' D" T0 h
例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:  
- U4 R7 Z6 ]  m, t1 J8 Sc:\regsvr32.exe sample.ocx . r$ `6 N# C0 x3 `+ W7 n" w
8 }5 M: J6 N: |# b+ N& e
Regsvr32.exe 错误消息 + s9 v$ e3 k) H

* l, n+ o4 @7 W: h5 y以下列表介绍了 RegSvr32 错误消息和可能的原因。  
* e7 J9 ], a5 u+ l2 x& C* g% {2 H# x! y! }2 ?
Unrecognized flag:/invalid_flag
) ?- L. P! k6 X3 x/ P9 n1 W: y
8 _, L6 B8 b  r2 N9 A5 c键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。  
/ R. E! Y" E6 e$ q2 j
1 A: o0 C8 p1 d0 p- p: J/ u  o2 r$ cNo DLL name specified.
7 @3 i. e- j9 g4 g; _3 L2 o4 |2 y( {& p9 u  b
未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。  
( j4 u" c. {3 }5 N& [  t
) v6 d! R, B2 T3 n& ?3 B& a5 {1 tDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
6 ?7 [2 `7 X  o9 c' G7 N# s; P$ |4 R' I
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。  
! `: F- S, }3 `3 W; E7 }* }2 L& |" L: G5 F
Dllname is not an executable file and no registration helper is registered for this file type.
% u0 e2 m  q: D, ?- S" c/ _
' _; c* O; J3 {; |0 FDllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。
1 N9 F- D" F7 d) O- j! Z' \9 T& e0 i$ B* Q& e  P
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
* y: Y, j' E5 Z% X4 h. i- t" j! O0 ?. m  P3 u+ j- ^6 G: j
Dllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。  ( c  ?' x' ?( Z5 r- e! y% F- |% |

7 S: I- w8 H9 s* NDllname is not self-registerable or a corrupted version is in memory. 1 V8 e* r4 w# X2 ~$ P' ]6 v

4 {4 T. i' I- E  P例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:  
% Z- }7 d3 V  K8 q1 p  T197155 如何终止孤立进程  
* Y! {5 T/ D" C1 b7 S
, ~9 ?) v4 {+ [( h- D2 o+ ?2 UOleInitialize failed (or OleUninitialize failed). 4 a- ^; C+ W6 Q9 H1 O* ^+ R6 f

) Y1 `: @, m: E4 R* pRegsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。  ! x* \% F" V' y  E( q$ t3 R. d, D- N

, r5 B4 S8 S3 L% S$ pLoadLibrary("Dllname") failed.GetlastError returns 0x00000485 ( U. v2 p: J6 c, A8 A
& k. x# [6 I6 r
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。  
5 T/ i8 c- L# J3 Y
6 G) G* Q3 o) Q/ qLoadLibrary("Dllname") failed.GetLastError returns 0x00000002
6 K1 g2 F) j/ i7 `% c3 A, L
% D; J" e$ |( `! e$ J) g4 u在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。  . o( [( a, O: a- n+ z

' w% O- }6 g  y( |7 s5 P$ K( `LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f + o1 k& _' D% E) s$ C
- G9 [8 k2 n4 ]8 U5 J3 K( L
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。  ) M# X  u) |# ~

; a! ^$ P8 ^' a  H  aDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串 * R+ r" g1 q7 D% @
* t& V0 E; i! n- E; f
在 Winerror.h 中搜索字符串。  
8 r6 r, `( A& m0 b! LRegsvr32.exe 和依赖项 3 h/ \- y. |( C! A
RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。  
" m- n3 E& l- y2 T3 R' w
2 [- F# V" `- c5 X9 j1 n/ |# f9 \( y2 f您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
( c: {5 l* [! ?. o8 e* ^247024 Tools Included with the Microsoft Windows 98 Resource Kit  
回复

使用道具 举报

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

本版积分规则

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

浙公网安备 33032402001025号

GMT+8, 2025-12-30 13:53 , Processed in 0.053467 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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