电脑互动吧

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

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

[复制链接]
发表于 2013-5-16 20:01:25 | 显示全部楼层 |阅读模式
对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。
8 L5 M1 i4 E6 e- m) t  r: \) d. L5 _8 p3 Z! A+ T- y5 x7 Z5 }4 {
Regsvr32.exe 的用法 ! P7 U. i1 x- I( C* y1 B

6 Z- Y! ?9 a" j4 S( ?3 P& wRegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname
9 g1 E4 @4 H, m5 h3 T  }% T' q
: H6 \; v/ H0 z1 S: \7 @) B   /u - Unregister server<BR/>
7 m( ?) n9 m+ V& B   /i - Call DllInstall passing it an optional [cmdline];
% H# ~1 X: X& N* X, b        when used with /u calls dll uninstall . G4 g4 X* l( p: w; \2 _" _
   /n - do not call DllRegisterServer; this option must & g0 @& i$ @. l/ w& K& o( c! u
        be used with /i , [$ a5 J7 N" J. [. V

* o- Q- b* d% Q0 {4 _/ Q( W% Q当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:  8 \5 m6 `* T* D7 f+ ?8 r
http://msdn.microsoft.com/librar ... n32_error_codes.asp  0 J- |: s6 Q$ X3 ^3 J5 g  w

, s$ C# i5 _! r$ m7 {例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:  
4 S* K6 Q* G" R; y0 dc:\regsvr32.exe sample.ocx ( q% N6 r2 Y- H* z( j$ N2 ~
9 ]3 G. K3 k0 L- B" p5 c
Regsvr32.exe 错误消息 * ]( n! l) `. d# K

" z! ?* P: z) M3 a* J以下列表介绍了 RegSvr32 错误消息和可能的原因。  , H; {6 `1 y* X. f2 Y1 `4 D
4 O, c( e% a0 N& ?$ J
Unrecognized flag:/invalid_flag
% M8 b3 V6 B1 T3 [6 _7 `9 r4 b( x1 z( u/ }; a; k+ R# M4 g
键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。  
) i; a, Y1 C7 v+ U
/ x* [9 k5 A, Z% Z- BNo DLL name specified.
3 C* a; l  i8 O" t4 Z% H: ], J0 n  q+ i# N( A
未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。  , P3 {( o, w5 I+ D- E5 V

  m& n# x4 x' A8 u$ DDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. + N+ E3 r) p% j4 p$ F+ b

' b& S% X- S8 i  I0 Z2 Q! tDllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。  $ W1 _9 \- A0 G; m0 R. O

9 h! _1 ?' i3 Q2 [7 B0 bDllname is not an executable file and no registration helper is registered for this file type.
! w' O3 P6 w' O1 E. u& w, C% q9 H$ h/ g
Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。 2 f) e3 l/ M1 g0 z$ u
* F5 T4 g1 F* I% h" k5 t
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
) W; K/ y* s0 V* h; @% z+ ]
  C3 O* p+ X$ [/ c. K, cDllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。  ( i9 o; p+ I) A8 i
8 \' ?$ k2 a% t% d
Dllname is not self-registerable or a corrupted version is in memory. ( p5 P0 v1 g6 m; I$ p1 r% i4 a

. l& r) n) ^) a+ ]- D# Z例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:  9 l6 ^' A* U$ @0 B
197155 如何终止孤立进程  
$ C* I. ?# R& {/ a6 J: s$ [
& {! p9 {4 }& F. N0 \+ Z# ~3 |0 COleInitialize failed (or OleUninitialize failed). . s$ d' G1 W5 D( E9 a6 _: W4 N' q

7 f! t0 L3 B! P# |* j; kRegsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。  * s. |! O" J4 W( x$ z6 B! ~) n, s
  S" u4 z/ I/ F" g. ^! T% d' }0 W1 L
LoadLibrary("Dllname") failed.GetlastError returns 0x00000485 + C4 p4 u3 u& g) X7 F3 M
% z' n5 Y( R5 w6 N1 \: K
在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。  # G% Y9 j3 M# ~0 D, L

1 v' o$ r4 P- Z* z, Q5 A+ ]. v" CLoadLibrary("Dllname") failed.GetLastError returns 0x00000002
6 L" B" F6 j* S) E7 x  a0 h" v- E3 i
3 p1 \3 ~4 ]; k1 a7 s在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。  
! o, J* D8 _) ^. f' L( z9 Y) r! n
4 v- N# R) `# [1 d- `; z: x$ xLoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f $ R5 z) v. \5 L8 U
5 l( q  g$ _) V( ^
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。  
. E! ?4 N0 x! G) k% b7 \' }! E
/ p8 @2 L$ L! E2 c  EDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串
0 f# V' z- _4 G: m. T; o) V- x1 `; |1 ~% k  f' F
在 Winerror.h 中搜索字符串。  
( v7 x  n, O. Z& O. HRegsvr32.exe 和依赖项 ) W* I1 T: o: W& Q- g7 i3 V
RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。  
2 t8 W, l5 D9 T0 G) D! ?! U$ K" b) x- L! p. ?
您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
; H& J3 X7 \& D7 ?, A' F4 E" [5 Z247024 Tools Included with the Microsoft Windows 98 Resource Kit  
回复

使用道具 举报

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

本版积分规则

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

浙公网安备 33032402001025号

GMT+8, 2026-1-29 04:30 , Processed in 0.139481 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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