DCOM服务器注册失败。

4

我遇到了这个错误:

来源:DCOM
事件ID:10010

"服务器 {6FC4FDAE-96C8-11D3-9F9C-005004053207} 在所需的超时时间内未在DCOM中注册。"

这是针对特定exe的问题,当本地系统运行时正常,但在非内置管理员下运行时失败。 我需要exe在非内置管理员下运行。

目前,在Citrix上的Win 2k3机器上出现了此问题。

但我之前也在XP机器上遇到过这个问题。

有什么解决问题的提示吗?

3个回答

7
由于我并不完全了解语境,以下是一些提示,可以帮助您解决问题。在起始计算机和目标计算机上都拥有管理员权限会有所帮助(至少用于配置和检查)。
DCOM可能会令人困惑。在处理跨计算机边界的DCOM时,问题最有可能是来自于冲突和/或没有凭据的安全性、防火墙以及本地计算机和应用程序的DCOM设置。就80/20原则而言,这里有一些简单的规则可供参考。
首先,使安全性可见:在起始计算机上启动SecPol.MSC,在本地策略/审核策略中找到并打开每种事件类型的审核。在目标计算机上执行此操作也是明智之举。
还要提高DCOM事件日志记录。请按照以下说明操作:http://support.microsoft.com/kb/892500 其次,更改一个已知会影响DCOM的默认工作组设置。确保在起始计算机和目标计算机上均禁用Simple File Sharing(也称为仅限来宾身份验证)。如果两者都在域中,则很可能被禁用。否则,请转到secpol.msc\security settings\security options\network access: Sharing as security model for local accounts(设置为classic)。
第三,了解所需的安全性...
如果两台计算机位于不同的域或其中一台(或两台都在工作组中),则必须了解所需的公共安全性;也就是说,凭据必须在每台计算机上是相同或同步的。也就是说,在起始计算机上运行进程的登录用户必须在目标计算机上存在相同的凭据。对于在同一个域中的两者,不必担心,因为一个计算机基于域的凭据将与另一个计算机相同。
第四,尽可能让防火墙不再成为问题。
如果可以,请暂时禁用它。否则,请假定netbios端口和您的应用程序通过exename(135/139udp)进行。使用的端口是一种假设;也就是说,这可能不正确。
第五,在变得太复杂之前...只需尝试诱发错误(运行程序),并在两台计算机上查看系统和安全日志即可。如果是安全问题,它会像醒目的指示一样显眼,您可以相应地进行调整。
如果不是这样,dcomcnfg将成为您的朋友。特定组件的DCOM设置按以下优先顺序解析:代码执行、程序设置和默认机器设置。Dcomcnfg将帮助您解决后两个问题。您可以在http://www.opcfoundation.org/DownloadFile.aspx?RI=326上找到一些更具体(但简化的)说明。
如果遇到困难,请跟进。

1
在我的情况下,我的计算机上的XP被公司的IT人员修改了。因此,他们通过某些组策略,甚至对于管理员组也拒绝访问某些DCOM设置。
解决方法是使用内置管理员帐户的凭据在命令提示符中手动注册DCOM服务器。

1

在使用DCOM时,权限问题可能会让你感到痛苦...它们介于系统管理员和程序员之间,除非彼此了解足够多,否则很难克服。

至于您的特定问题,此错误消息的原因是服务器启动时间过长,延迟了对CoRegisterClassObject的调用,直到超时过期。我会在查看COM之前先查找问题的原因,检查您进行的任何初始化(全局变量构造函数等),并确保没有抛出异常等。更改用户可能会导致某些目录或注册表区域不可访问,可能会破坏初始化。

我会先使用ProcMon监视服务器活动。这将使查找任何访问被拒绝的问题变得容易,并显示相关的堆栈跟踪。如果需要调试,您可以在按照这些说明启动exe后立即附加调试器。最后,如果问题发生在没有VS的机器上,您可以使用WinDBG来调试进程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接