我的应用程序需要注册两个COM DLL。如果用户具有必要的访问权限,它会自动完成,否则可以使用regsvr32
完成。为什么我不能注册我的COM DLL?
现在在少数工作站出现以下情况:
- 开始
cmd.exe
作为管理员 - 注册第1个DLL:成功
- 注册第二个DLL:失败(0x80004005的,拒绝访问)
第一次向我报告这个错误时,我自动回答:“当然这不起作用,您需要管理员权限。”不用说,因为我试图自己注册这个DLL,所以我觉得非常尴尬......
这是什么原因:一个DLL可以注册,其他不可以。
一些背景资料:
- 两个DLL是用Delphi 2005
- 创建两个DLL中有非常简单的接口,只有极少数的类。
- 有故障的机器,总是Vista或Windows 7
一般情况下我开始进程监视器,但我没有访问工作站之一,现在,所以我必须要收集尽可能多的信息尽可能直到我能掌握其中的一个。
UPDATE:我远程访问了一个失败的工作站。神秘的事情发生了:
- 启动进程监视器是不可能的(!)几秒钟后,Windows显示“内存不足”错误。
- 切换到不同的用户可以注册该DLL。
换句话说(!):
- 作为
UserA
登录,开始cmd.exe
作为管理员,regsvr32.exe
:失败 - 身份登录
UserB
,开始cmd.exe
作为管理员,regsvr32.exe
:成功
什么可以引入这样的行为?!
如果世界是公平的,所有工作站都会禁止COM注册=) – 2010-01-22 10:11:00
为什么投票将它关闭为“属于serverfault?”我认为这里更适合。 – Shoban 2010-01-22 10:13:34
可能是一个愚蠢的Q :)当你首先注册第二个DLL然后第一个DLL时发生? – Shoban 2010-01-22 10:14:01