电脑互动吧

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

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

[复制链接]
发表于 2013-5-16 20:01:25 | 显示全部楼层 |阅读模式
对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。
6 {0 {0 }  U7 F. X  o8 T% X2 f: c' }, I$ `0 w& k. N/ Q
Regsvr32.exe 的用法 8 K4 b! j& B, e+ g4 J% f* n  f

5 p4 i: S: x' Y# _) fRegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname
" C. ]5 I) I5 X& Q/ j! w/ L) g& v" Y% J3 e/ K3 b* K
   /u - Unregister server<BR/> 0 w7 @" y' e+ |
   /i - Call DllInstall passing it an optional [cmdline]; 8 Q- M& n1 g4 C' H
        when used with /u calls dll uninstall $ c$ M+ l5 _+ u8 U2 ~% O7 f/ t
   /n - do not call DllRegisterServer; this option must
0 c9 Z. J! {$ G. V5 t  V6 E        be used with /i
$ \. T6 m3 M2 E, `9 n4 t8 O; M5 e# g6 E8 }) V. V
当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:  
6 A, g8 M4 }% @& ~( s# ~http://msdn.microsoft.com/librar ... n32_error_codes.asp  
( h: [9 E' K- Q8 S; i: f* x5 P7 l3 x: S* H+ M  O! u+ c! Y
例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:  
. X: ~% d# |9 V. n. yc:\regsvr32.exe sample.ocx
7 u6 @% i  n6 q" y  w) i& T* X8 K1 {7 y+ O" K% ~  ~& U$ {; X
Regsvr32.exe 错误消息 4 Y- Q: ?, C% r, O

7 [  t3 P5 T( ^9 P' V# w以下列表介绍了 RegSvr32 错误消息和可能的原因。  8 p/ U1 `! k0 Y0 l& Q
1 `% Y$ c* l6 C/ I( }" q
Unrecognized flag:/invalid_flag 0 i( C: L) ?9 B6 w

, Z0 S1 f" n7 m2 A键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。  $ X9 d# d" y7 h1 n
- Z7 s/ N, q' `, |# r7 i, c% a
No DLL name specified. 3 q: @; J" Y: B. f2 {- v

5 T( e# A' E6 B) n( h未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。  5 T1 V. l- e5 A3 k: h

" F) E( ^( N4 h4 W0 kDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
% L( l) M! n4 |# a
5 p' y% t* D+ X, }Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。  2 W( y5 I3 o' u+ u4 x

( g& k. r& J1 m, RDllname is not an executable file and no registration helper is registered for this file type.
3 ~* N! M' X9 R2 T( t& Y3 j/ L
( B. [9 _1 z$ r# ~# iDllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。
& p1 i" ~+ w9 N% w9 P( k: _
$ M8 b4 A. f$ b% u' c  `/ r" hDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
" X7 m$ G/ C# B
$ F+ _! q0 O2 d( }2 S+ \% y3 SDllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。  . o# `  I7 e% Q- r# q" t3 z
9 j- u5 z0 h  x" C- o
Dllname is not self-registerable or a corrupted version is in memory.
8 R4 P4 B8 X4 o! [7 w: [- g- A- P; t8 s
例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:  * l/ t) V  ~+ E+ y
197155 如何终止孤立进程  
' B0 ?4 J; b( q- }0 H7 V
& V+ a: u5 L/ Q  d, X; K# |' qOleInitialize failed (or OleUninitialize failed).
9 I, S  Z6 o  g$ ?5 @' L0 k) G2 s  G5 J; z
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。  
. B9 ~3 C4 t( v: E% }  _# I  u
2 M/ y& j* w; C6 S; }% N* ~LoadLibrary("Dllname") failed.GetlastError returns 0x00000485 % W' Q; P' f; a. w5 O  d- {

" M! {/ ^2 c+ l' H' ^7 v( P在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。  % i- i4 u/ _1 m. g

. n; k# M# i( p, f! {LoadLibrary("Dllname") failed.GetLastError returns 0x00000002
& h' }: N; c3 e% b
! @2 l8 e# f' |3 b0 w4 g在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。  
% j  P& ?# ^7 f) Q+ l" _8 y$ G
( U6 C% o  Y1 K$ h5 }( P/ TLoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f
; o' a& p  ?+ ?) W/ Z: {5 S- S- K
2 ^# z" E+ j' C3 I( i在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。  / Y3 t- `' p6 N5 Q0 v  K& ]

6 D$ S% Z( P& vDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串
! }- b& `- W, P" z8 }0 `" {# }8 F/ a6 z& U/ n- a9 {  ]
在 Winerror.h 中搜索字符串。  ' e2 g% Y2 z, L' {  j# ~
Regsvr32.exe 和依赖项
/ [1 f3 j1 K0 w' {& A0 W0 Y' O* JRegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。  
/ S& z8 g! E7 b! s+ U! |9 a
/ i/ {7 k# a0 e5 Q# H) s' E您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。 6 L8 i, p: R: Y+ W4 [
247024 Tools Included with the Microsoft Windows 98 Resource Kit  
回复

使用道具 举报

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

本版积分规则

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

浙公网安备 33032402001025号

GMT+8, 2026-3-6 11:02 , Processed in 0.053226 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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