电脑互动吧

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

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

[复制链接]
发表于 2013-5-16 20:01:25 | 显示全部楼层 |阅读模式
对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。+ o$ J2 I% |- x' B

- h# t4 }, K5 A0 L. kRegsvr32.exe 的用法
8 D% M. ?7 K% c- z
9 U; X  Q. G! M6 Z- X8 H$ `RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname
/ F, |9 d* [6 c7 N( G0 J" n# f& A: ?
   /u - Unregister server<BR/>
) C4 r: ~( N0 c   /i - Call DllInstall passing it an optional [cmdline]; 2 @# S  H& w' V. }
        when used with /u calls dll uninstall + Z' Q! B% z' f
   /n - do not call DllRegisterServer; this option must 5 q1 A" r4 }+ u4 d3 D* L
        be used with /i
+ T/ L/ p7 R6 u* S
- {2 F' x) M+ R, \0 u. a5 m当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:  5 X$ T8 ^) u) |9 @7 U
http://msdn.microsoft.com/librar ... n32_error_codes.asp  
5 m/ n5 N; y3 m
0 s0 u" h2 f! j* m  p  [! B例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:  
1 ?* Q: d7 e+ N9 h9 r4 {$ o: \c:\regsvr32.exe sample.ocx
0 c% U& G3 O" o
- y( _! d6 }$ s/ i! QRegsvr32.exe 错误消息 . H$ H, W' X; g" W

: Q7 W' B: ~4 W以下列表介绍了 RegSvr32 错误消息和可能的原因。  
3 S6 W+ T) _# x5 e  L; ]+ O* x5 c9 e. n( `) X6 l
Unrecognized flag:/invalid_flag 1 G# h. @6 Y) l4 V
2 @5 `8 Y- I7 ]8 q7 {. u
键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。  # n3 G0 `6 B0 E! e

! `& B" t. ^) X& U' r0 Y" NNo DLL name specified.
0 |9 F& Y4 ^3 ?' G
; A4 ^& Q0 Q2 K' d未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。  
. Q. i: b2 j6 `* p# P! b) @9 \8 y3 w  @
; h% w# N. p1 o* e% r" W6 K* SDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. $ U, Z( _5 A4 d% p7 ~$ S6 y' j: h
3 S2 L" d  Y$ i
Dllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。  
/ f8 z; R, s" y: E+ g2 m6 v5 C
Dllname is not an executable file and no registration helper is registered for this file type. % Z: E9 r  \: p8 C7 E

2 {6 x' q& L! \2 N6 ?Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。
! A/ W/ y9 L4 q' I1 j4 o% P
2 N' r2 c7 t; t8 D3 d# S1 XDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
1 W. [- t& `2 T  ]+ Z% M8 l8 j& M+ _1 R& z
Dllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。  
  y: @3 q6 Z, X2 n5 C2 H
7 q& x9 J2 F2 @8 J. k1 Z  x' ODllname is not self-registerable or a corrupted version is in memory.
/ _8 m! z& @8 h
& C/ T* K- C! H/ U, c例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:  
+ ~$ e/ S  R8 \# G" G7 }' B0 r197155 如何终止孤立进程  5 K; x9 n$ k9 {# G6 d: N9 M. e4 t( R7 E
+ \& h# S2 }$ F9 D
OleInitialize failed (or OleUninitialize failed).
# x, e; h1 J( \. w0 o8 n' i  z0 R3 r( \. ~2 F* P. Y
Regsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。  , G* t" H5 c4 E% Z# [
! O8 [; C7 z( g' X; ~, t
LoadLibrary("Dllname") failed.GetlastError returns 0x00000485 , ~" @- h+ }- i

( v1 t3 i; O4 O7 f6 O9 P在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。  " ]: |' X  _+ U* s
; C, n1 \, H, K" r1 ?/ g, i1 ~
LoadLibrary("Dllname") failed.GetLastError returns 0x00000002
6 a% Z* M/ B" z; i% l7 b8 c
" m( W. i9 x8 U& g7 u! `2 \. U在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。  
# ~3 {  n+ q: O, M4 K
1 T$ M( N6 r  K- @LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f
* w$ C4 ]" B+ l; u$ q$ \" J! i, J8 j+ P. \
在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。  
8 V4 @9 z* Q, r% d7 g/ B$ m. @8 a( H
DllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串 - C6 s' W; _" R) Q( C/ u8 ?

2 }7 f4 t2 S, N' |: D8 X+ Q. D7 T在 Winerror.h 中搜索字符串。  
( q' A) N/ y( s% s! c8 ~Regsvr32.exe 和依赖项 * V$ M% C3 ?. d) P3 i0 j$ H, j: [
RegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。  $ h1 p7 C7 C  ~# G0 T6 L- m

2 i# k  X, z/ `) ~( _, N7 l您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
( Y  Q; u! M% S+ d: _* M247024 Tools Included with the Microsoft Windows 98 Resource Kit  
回复

使用道具 举报

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

本版积分规则

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

浙公网安备 33032402001025号

GMT+8, 2025-12-17 01:16 , Processed in 0.053597 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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