电脑互动吧

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

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

[复制链接]
发表于 2013-5-16 20:01:25 | 显示全部楼层 |阅读模式
对于那些可以自行注册的对象链接和嵌入 (OLE) 控件,例如动态链接库 (DLL) 文件或 ActiveX 控件 (OCX) 文件,您可以使用 Regsvr32 工具 (Regsvr32.exe) 来将它们注册和取消注册。
8 J! I7 L. q1 z4 Z$ i( C5 J" k! j
Regsvr32.exe 的用法 5 ^" J" E& `1 T- P& r& e
7 D" n8 g* ?/ V9 A( |
RegSvr32.exe 具有以下命令行选项: Regsvr32 [/n] [/i[:cmdline]] dllname
2 J) j& p9 H7 p, f
1 [/ n& B7 p. r/ z. U, G: i! g; Z   /u - Unregister server<BR/>   N" z1 J: m; K) Z
   /i - Call DllInstall passing it an optional [cmdline];
! B0 x9 E1 m% Y0 K3 ^; E: g$ L  d        when used with /u calls dll uninstall $ X/ g6 u2 R4 c/ j
   /n - do not call DllRegisterServer; this option must 6 h+ w! ]1 R% }5 Z  e& p4 P+ z) p' z- ?
        be used with /i
$ k) D. r" s8 G7 v6 v, `$ y, C: v4 T. U7 ?* g
当您使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。要查看 Win32 错误代码的列表,请参见下面的 Microsoft Web 站点:  * W+ t# L& T" @: w# [+ _
http://msdn.microsoft.com/librar ... n32_error_codes.asp  ) E# ?- R6 e& H4 k9 `- |1 Q  D

- R) k: K  Q, Y4 v例如,要手动注册 Sample.ocx ActiveX 控件,请在 MS-DOS 提示符处键入以下命令:  4 ?0 `3 Y+ w) z
c:\regsvr32.exe sample.ocx : T+ [& v: E6 \$ m5 H

  [5 _" O! I+ F) m! ?* w2 R% URegsvr32.exe 错误消息 ! `/ `& ~+ `; |; D* t0 W1 T1 u
" e; i4 y  Y5 ]2 p- o6 G
以下列表介绍了 RegSvr32 错误消息和可能的原因。  
; J! ?1 D1 Q% S; s; @" a4 g' q# a% n4 N! ?
Unrecognized flag:/invalid_flag
, t6 t9 n& `2 j' U/ w! x% Q6 g# {: O. Z
键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。  % |" a0 j+ s) v  _, Q

1 {5 ]8 w0 D% f; T& q7 Q  t% k+ q% bNo DLL name specified. 7 {( p5 w5 _, a' E1 w' U

6 D" a9 r1 P! ?+ t. S未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。  
+ h5 y# a- T4 ?: I7 Y4 \: _' g) H& F' F1 H; d. Y' A
Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
* h$ Y4 H7 K7 V$ v, d- J
3 f# N& f) |0 [5 w1 Z$ H3 {, n5 e& EDllname 不是 .dll 或 .ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。  4 L$ n$ n, k% I
4 E9 u% C* |9 {0 i" ]
Dllname is not an executable file and no registration helper is registered for this file type. $ u+ l" Y" a. b4 Q
1 E& c: z0 O  o3 A8 z5 ~; |2 B4 Z9 w
Dllname 不是可执行文件(.exe、.dll 或 .ocx)。例如,键入 regsvr32 autoexec.bat 就会生成该错误消息。   _3 G) E( L2 r+ g

' Z8 k, K2 v/ |, H8 U* _$ BDllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found.
( M- F# ^) b9 O- W: K) M9 I
6 n9 ]  q7 s! h! [% e4 CDllname 可能未导出,或者内存中可能有损坏的 Dllname 版本。请考虑使用 Pview 来检测该文件并删除它。  $ q# l+ C9 _; a* h% d3 `" t

- {2 t$ b* k: R9 F+ ~5 u  dDllname is not self-registerable or a corrupted version is in memory.
% R/ T5 ?! `3 Z' k2 W
+ U( g0 T5 {" {5 R例如,键入 regsvr32 icwdial.dll 后就会返回该错误消息,因为 Icwdial.dll 文件不能自行注册。如果您怀疑内存中有损坏的 Dllname 版本,请尝试重新启动计算机,或重新提取该文件的原始版本。如果您运行的是 Windows NT,可能需要使用 Microsoft Windows NT Server 4.0 资源工具包 中的 Kill 或 Pview 工具。有关其他信息,请单击以查看以下 Microsoft 知识库文章:  & f+ z9 C# Z. o6 G; [
197155 如何终止孤立进程  ( p/ _( l0 l* }0 R) G
/ F" N4 A9 B$ n7 E1 g0 o
OleInitialize failed (or OleUninitialize failed). ( A' L7 T6 m7 L  h

& H: h: k, a* W' ^) ?  k% JRegsvr32 必须先初始化 COM 库,然后才能调用所需的 COM 库函数并在关闭时撤消对该库的初始化。如果对 COM 库进行初始化或撤消初始化的尝试失败,就会出现这些错误消息。例如,Ole32.dll 文件可能已经损坏,或者其版本有误。  
5 D5 N3 L3 [! v  V& v" D' E
. [8 b3 M- y8 }' \LoadLibrary("Dllname") failed.GetlastError returns 0x00000485
( O' D4 ?- V0 C
: F( l7 S; D# u0 w: ~; t# |( K: G在 Winerror.h 中,0x00000485 = 1157 (ERROR_DLL_NOT_FOUND),表示“找不到运行该应用程序所需的某个库文件”。例如,键入 regsvr32 missing.dll 后,如果找不到 Missing.dll 文件,就会返回该错误消息。  
" c9 @1 F* [) {+ P2 }, x+ x0 B
  I2 E  f6 B2 r' O# b: _LoadLibrary("Dllname") failed.GetLastError returns 0x00000002 / Y3 x% Q( a* m) _

- \! x! L# {$ D* o$ Q: H在 Winerror.h 中,0x00000002 = 2 (ERROR_FILE_NOT_FOUND),表示“系统找不到指定的文件”。换言之,系统找不到相关的 DLL。例如,如果键入 regsvr32 icwdial.dll,而此时缺少 Tapi32.dll(依赖项),就会返回该错误消息。  
5 p9 t* U) |. k" w% b& g( o. x. B) a$ r
LoadLibrary("dskmaint.dll") failed.GetLastError returns 0x000001f 5 i  G8 x# D6 Y. `) h2 G

0 d* R. i' S3 |9 Q7 a" J" f在 Winerror.h 中,0x000001f = 31 (ERROR_GEN_FAILURE),表示“附加到系统上的设备不能正常工作”。如果您尝试注册 Win16 .dll 文件,就会发生此现象。例如,键入 regsvr32 dskmaint.dll 会返回该错误消息。  . U; p  P+ Q  Z' \  I. I

9 ~8 p& u6 \% ^" u, eDllRegisterServer (or DllUnregisterServer)in Dllname failed.返回代码是:字符串
; ?& F; m9 c3 I% u  C6 a* G6 f6 k: L& \2 a4 C% m
在 Winerror.h 中搜索字符串。  
( [, H- [, O  mRegsvr32.exe 和依赖项
: V; h0 Q: U8 ?2 L0 b3 rRegSvr32.exe 依赖于 Kernel32.dll、User32.dll 和 Ole32.dll 文件(在 Windows NT 中,还依赖于 Msvcrt.dll 和 Advapi32.dll 文件)。Regsvr32.exe 会加载您尝试注册或撤消注册的文件及其所有依赖项。如果缺少必需的文件或者它们已损坏,该进程可能会失败。  
; e+ G; w) B' f# Z3 r
# v+ D" ^$ `& H( ~3 G8 M% l您可以使用 Depends.exe 来确定您尝试注册或撤消注册的文件的依赖项。在 Microsoft Windows 98 资源工具包 和 Microsoft Windows NT 4.0 资源工具包 支持工具中都提供了 Depends.exe。
( e4 p3 r6 z# B2 `( Z2 e7 r247024 Tools Included with the Microsoft Windows 98 Resource Kit  
回复

使用道具 举报

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

本版积分规则

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

浙公网安备 33032402001025号

GMT+8, 2026-8-1 06:11 , Processed in 0.055653 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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