电脑互动吧

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

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

[复制链接]
发表于 2013-5-16 20:01:25 | 显示全部楼层 |阅读模式
对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。, S! G# t8 Q1 A: k8 c7 a0 P

( {' N# X0 G/ u' Z% ?' _) k  P+ M. `Regsvr32.exe 的用法 6 E) |5 ~. b5 C, O" h0 \

# h! V5 W. K% `( u; S% J$ B. m$ hRegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname 5 H$ }% ?, |  S
3 Y9 C/ }% }- Y! G; t. z& r
   /u - Unregister server<BR/>
, {2 k' k' v) m5 ~0 @# W   /i - Call DllInstall passing it an optional [cmdline];
# y4 \$ C* ]! A8 v9 W        when used with /u calls dll uninstall ; Q6 t" c0 ?/ k; X  K% }8 Q
   /n - do not call DllRegisterServer; this option must ) k; D+ O0 M0 ^. z: E1 ^7 f
        be used with /i
# m' f' A* v3 d" A5 Y6 E' X% _6 @8 U/ i3 b" R& _! X
当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:  ( j' ^+ E3 M* F8 p/ e3 G
http://msdn.microsoft.com/librar ... n32_error_codes.asp  # p) D! H+ q/ g$ I7 m. `: H

8 ?! E4 [/ Y, \& U( u; ]6 f: V例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:  
7 G9 Q+ _9 X% ^" hc:\regsvr32.exe sample.ocx
3 n0 P' k/ ]" ?3 W& q5 {5 C3 R6 ]$ g% |3 B4 x5 c* v2 B
Regsvr32.exe 错误消息
1 A/ j9 T* D% B0 a# o/ v4 K! c" C" C/ x6 I
以下列表介绍了 RegSvr32 错误消息和可能的原因。  : E8 r- c) _. L2 ~' |: f7 s7 w. z

& ^+ C2 e( R+ z+ G6 _, I  CUnrecognized flag:/invalid_flag & I4 {) H! N+ n5 n) I" q" ~* g

" i' g* F2 F$ Y# e3 J4 w7 c( d键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。    H: A. L0 ?' F; u$ J% n: H
, c; g- \4 M" ]$ O- G, O
No DLL name specified.
7 L3 d. o4 G) O/ M" O! b+ n5 U; h* q
未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。  * N8 f5 }0 U) P4 [
* [# n! {1 d( d( x! m- e* D
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
* I' [9 j$ H4 L  z4 b' F5 ~3 \
/ F6 a+ ^, {$ L( z: UDllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。  
- |. \  v! x  P$ p% @! R* p0 Z& A& @6 o' c- P( u+ A9 O: g
Dllname is not an executable file and no registration helper is registered for this file type.
7 k, Q: a8 E0 {$ C, w, w* k0 _. \! Y1 R$ _" C
Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。
, t' W. L5 B% @2 o! d0 R. ~, W% p1 O( u" |  l4 O& }
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. $ k5 h: i. }) C

, Y: a; S+ l6 k9 l; h+ RDllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。  " U) ]( q4 h; m, M$ B
3 h6 l, X# J( c$ p: u; y
Dllname is not self-registerable or a corrupted version is in memory.
  }; ?3 J/ z( L0 W6 z- b7 d1 W6 W# v. {' `" H3 r! g
例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:  + z5 g2 ]6 S/ C- ]6 O
197155 如何终止孤立进程  
1 |* l! r9 b5 t( I$ ~/ t6 B5 z% R4 G3 l' g+ A7 z: \+ j4 K
OleInitialize failed (or OleUninitialize failed). . S2 m, J  T; ]4 F
- ~7 R( R/ u6 S$ p/ S( c# A) R& s
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。  0 y0 w, M2 B; M" V% h5 T
3 x) B( \" M, n2 E# ^) m# O
LoadLibrary("Dllname") failed.GetlastError returns 0x00000485 ; p) @# Z& }1 ]. w4 Q3 a) n

1 |7 Q; A% y" T$ C0 y' g在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。  * z0 [& `& s4 o( [# P: J

5 v& E2 N  T) m! Q) y* ]LoadLibrary("Dllname") failed.GetLastError returns 0x00000002 ( Z4 v! p4 }( I/ X  E/ C! |& N' m9 i
: k4 W; q  E/ @! F% F4 {
在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。  7 b6 i5 ^. `0 ]
9 y) ?( T. V. O% L
LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f 1 x" E7 _1 o3 }! y
6 d4 j7 W" o- ?2 T+ N6 L
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。  % V2 F& c- H5 Z/ m
$ x9 K# ^) ^& w: m
DllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串
$ y0 y9 t) ]# {1 l' X3 a2 E) d# D3 I3 H, o8 f
在 Winerror.h 中搜索字符串。  
/ b! b: |6 G& p) M5 h# nRegsvr32.exe 和依赖项
0 A. Z8 ~+ K! @  `/ NRegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。  
) X& r$ t0 D, h' N- A  f. U9 W
/ g8 G" {' ]* O( N5 ?您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。 ; S& q6 U% ^2 g
247024 Tools Included with the Microsoft Windows 98 Resource Kit  
回复

使用道具 举报

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

本版积分规则

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

浙公网安备 33032402001025号

GMT+8, 2025-5-4 06:56 , Processed in 0.055243 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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