问题描述:
我在安全模式下杀毒以后重启电脑出现这样的错误提示:DCOM遇到错误,不能在安全模式下启动这项服务,试图以“”启动服务“EventSystem”以运行服务器{1BE1F766-5536-11D1-BF26-00C04FB926AF}
事件ID:10005
我的电脑系统是2003,装有IIS6。0
解析:
单击开始,单击运行,然后键入 DCOMCNFG。选择要自动运行的应用程序。应用程纤蠢序名称如下所示:
Microsoft Word 2000/2002/2003 - Microsoft Word 文档
单击属性打开此应用滑败程序的属性对话框。
单击安全性选项卡。验证使用默认的访问权限和使用默认的启动权限已选中。
单击身份标识选项卡。选择指定用户,并键入 一个管理员权限(你的ID) 的用户名和密码。
单击确定,关闭属性对话框并返回主应用程序列表对话框。
在“DCOM 配置”对话框中,单击默认安全机制选项卡。
单击访问权限的编辑默认值。验证访问权限中是否列出下列用户,如果没有列出,则添加这些用户:
SYSTEM
INTERACTIVE
Everyone
Administrators
YOUID---
IUSR_*
IWAM_*
* 这些帐户仅在计算机上安装有 Inter Information Server (IIS) 的情况下才存在。
确保允许每个用户访问,然后单击确定。
单击启动权限的编辑默认值。验证启动权限中是否列出下列用户,如果没有列出,则添加这些用户:
SYSTEM
INTERACTIVE
Everyone
Administrators
YOUID---
IUSR_*
IWAM_*
* 这些帐户仅在计算机上安装有 IIS 的情况下才存在。
确保允许每个用户访问,然后单击确定。
单击确定关闭 DCOMCNFG。
启动 REGEDIT,然后验证对于要自信竖颤动运行的 Office 应用程序,是否存在下列注册表项和字符串值:
Microsoft Word 97/2000/2002/2003:
注册表项:HKEY_CLASSES_ROOT\AppID\WINWORD.EXE
AppID:{***********-0000-0000-C000-000000000046}
其实还有其他同类的错误:
Microsoft Access 2000/2002/2003:
是
AppID:{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
Microsoft Access 97:
AppID:{8CC49940-3146-11CF-97A1-00AA00424A9F}
Microsoft Excel 97/2000/2002/2003:
AppID:{***********-0000-0000-C000-000000000046}
Microsoft Word 97/2000/2002/2003:
AppID:{***********-0000-0000-C000-000000000046}
改的方法同上面word的。
2)*******************
系统日志中的大量DCOM错误
内容如下:
Access denied attempting to launch a DCOM Server. The server is:
{***********-0000-0000-C000-000000000046}
The user is Unavailable/Unavailable, SID=Unavailable.
这种错误只有在拨号上网的时候才发生,如果是通过网关上网,则没有这个问题。初步判断应该是不断的遭到攻击造成这个问题。于是用stat命令检查上网时来自公网的Socket连接,发现1025端口和135端口很可疑。在防火墙中屏蔽了这两个端口后,问题解决。(只屏蔽一个端口似乎不能完全起作用,还会有一部分DCOM错误记录下来,只是频率降低了。)
系统日志中的大量DCOM错误之补充
今天发现还需要屏蔽TCP的445端口才能完全杜绝系统日志中的DCOM错误。
日志文件里出现DCOM错误码是因为我的防火墙的路由器的DMZ指向我的机器。把DMZ一关日志文件马上就没有出现DCOM错误,断定是第二类错误。
CORBA:CORBA是CommonObjectRequestBroker的缩写,它是分布计算机技术的发展结果,CORBA技术的成功在于,它除了能够解决由于多个系统层次上的异构带来的“孤岛”问题,还在理论和技术上扩展了客户/服务器的模式,使系统具有良好的可伸缩性,便于系统的开发与升级,保护已有投资。
CORBA体系的主要内容包括以下几部分,(1)对象请求代理ORB(ObjectRequestBroker):负责对象在分布环境中透明地收发请求和响应,它是构建分布对象应用、在异构或同构环境下实现应用间互 *** 作的基础。(2)对象服务(ObjectServices):为使用和实现对象而提供的基本对象集合,这些服务应独立于应用领域。主要的CORBA服务有:名录服务(NamingService)、事件服务(EventService)、生命周期服务(LifeCycleService)、关系服务(Service)、事务服务(TransactionService)等。这些服务歼旦几乎包括分布系统和面向对象系统的各个方面,每个组成部分都非常复杂。(3)公共设施(CommonFacilitites):向终端用户提供一组共享服务接口,例如系统管理、组合文档和电子邮件等。(4)应用接口(ApplicationInterfaces):由销售商提供的可控制其接口的产品,相应于传统的应用层表示,处于参考模型的最高层。(5)领域接口(DomainInterfaces):为应用领域服务而提供的接口。如OMG组织为PDM系统制定的规范。
DCOM:Microsoft的分布式COM(DCOM)扩展了组件对象模型技术(COM),使其能够支持在局域网、广域网甚至Internet上不同计算机的对象之间的通讯。使用DCOM,应用程序可以在位置上达到分布性,从而满足客户和应用的需求。
DCOM是组件对象模型(COM)的进一步扩展。COM定义了组件和它们的客户之间互相作用的方式。它使得组件和客户端无需任何中介组件就能相互联系。
EJB:它是Java服务器端服务框架的规范,软件厂商根据它来实现EJB服务器。应用程序开发者可以专注于支持应用所需的商业逻辑,而不用担心周围框架的实现问题。
EJB规范详细地解释了一些最小但是必须的服务,如事务,安全和名字等。软件厂商根据这些睁陪规范要求以保证一个enterprisebean能使用某个必需的服务。规范并没有说明厂商如何实现这些服务。这使得通过阅读规范来学习EJB更加困难,因为它允许厂商在不牺牲核心服务的可移植性的前提下来提供一些增强功能。
EnterpriseJavaBeans体系结构
EJB服务器是管理悉改蠢EJB容器的高端进程或应用程序,并提供对系统服务的访问。EJB服务器也可以提供厂商自己的特性,如优化的数据库访问接口,对其他服务(如CORBA服务)的访问,对SSL3.0的支持等。一个EJB服务器必须提供对可访问JNDI的名字服务和事务服务支持。一些可能的EJB服务器的例子如:
数据库服务
应用服务器
中间件服务器
EJB容器是一个管理一个或多个EJB类/实例的抽象。它通过规范中定义的接口使EJB类访问所需的服务。容器厂商也可以在容器或服务器中提供额外服务的接口。现在没有EJB服务器和EJB容器间接口的规范。因为目前容器通常由EJB服务器来提供,所以一旦接口标准化了,厂商就可能提供可以在任何兼容的EJB服务器上运行的容器。
Home接口列出了所有定位、创建、删除EJB类实例的方法。Home对象是home接口的实现。EJB类开发者必须定义home接口。容器厂商应该提供从home接口中产生home对象实现的方法。
远程接口(remoteinterface)列出了EJB类中的商业方法。EJBObject实现远程接口,并且客户端通过它访问EJB实例的商业方法。EJB类开发者定义远程接口,容器开发商提供产生相应的EJBObject的方法。客户端不能得到EJB实例的引用,只能得到它的EJBObject实例的引用。当客户端调用一个方法,EJBObject接受请求并把它传给EJB实例,同时提供进程中必要的包装功能。客户端应用程序通过home对象来定位、创建、删除EJB类的实例,通过EJBObject来调用实例中的商业方法。客户端可以用Java来编程,通过JavaRMI来访问访问home对象和EJBObject,或用其他语言编程并通过CORBA/IIOP访问,使得部署的服务器端组件可以通过CORBA接口来访问。
当您要实例化一个 COM 时,就会出现该问题的大多数对象在远程计算机上通过 DCOM 与 Dcomcnfg 或网络问题中的设置不正确。问题很少与该代码。要做的第一件事就是要记下与您的环境和应用程序本身,如相关的信息:
有关在服务器计算机:
在服务器计算机是服务器应用程序即将运行的计算机。收集以下数据:
*** 作系统和安装的服务包。
是否有人登录到计算机?
如果登录是有人他们的权限是什么?他们是否在管理员组的一部分吗?是否他们作为登录域用户吗?
有关客户端计算机中:
客户端计算机是在客户租孙端应用程序即将运行的计算机。收集以下数据:
*** 作系统和安装的服务包。
谁登录到这台计算机?是否它们作为域用户或身份登录本地用户吗?如果作为域用户登录他们在服务器计算机上的权限是什么?他们是否在服务器计算机上管理员组的一部分吗?
有关服务器应用程序:
使用的语言、 版本,和服务包的开发服务器?
不会它回调到客户端吗?
它不会引发事件吗?如果是这样,DCOM 安全设置在客户端计算机上为访问权限授予 所有人 帐户吗?
它有一个用户界面?
它被标记为 无人参与逗型州执行 吗?
它设置安全参数的函数,如 CoInitializeSecurity 或 CoSetProxyBlanket 调用通过以编程方式吗?
有关客户端应用程序:
使用的语言、 版本,和服务包已开发的应用程序?
它设置安全参数的函数,如 CoInitializeSecurity 或 CoSetProxyBlanket 调用通过以编程方式吗?
有关网络:
是否在客户端和服务器计算机上同一局域网 (LAN)?
是否在客户端和服务器计算机连接了 Internet 防火墙和它们之间的代理服务器没有通过?
是否在客户端和服务器计算机连接通过互联网使用防火墙和它们之间的代理服务器吗?
基本故障诊断步骤
检查所有 Dcomcnfg 中的设置合适,基于您在前面收集的数据。
268550如何为 Visual Basic DCOM 客户端/服务器应用程序使用 Dcomcnfg
如果您使用 Microsoft Windows 95 客户端或服务器计算机上,请确保您具有在其上安装 DCOM95。您可以从下面的 Microsoft 网站下载 DCOM95:
http://www.microsoft.com/com/dcom/dcom95/download.asp
如果您在服务器计算机上使用 Windows 95、 Microsoft Windows 98、 Windows Millennium 版 (Me),您将需要对您尝试使用客户端之前运行该服务器组件。作为一种检查验证服务器正在运行并且它正在等待客户端连接。
165101如何使用 Windows 95、 Windows 98 或 Windows Me 为 DCOM 服务器
如果客户端和服务器计算机通过防火墙和它们之间的代理服务器与 Internet 连接,DCOM 无法正常工作,如果没有任何类型的地址转换 (NAT) 在它们之间。如果没有地址转换您需要配置这些代理和防火墙以启用 DCOM 通信。您可以找到几个与 Microsoft 开发人员网络 (MSDN) 或在下面的 Microsoft 网站此主题有关的白皮书:
http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/cnet/cnad_arc_wbak.mspx?mfr=true
此主题不介绍本文中的内容。
其它故障诊断
如果设置为根据您的环境和应用程序功能的权限设置的 Dcomcnfg 后仍有问题,下面是几个步骤,您可能需要解决您的问题:
使用任务管理器来验证服务器未运行时使用 Dcomcnfg 设置中进行更改。因此如果服务器正在运行时更改设置,新设置仅生效的下次启动时服务器启动时,所有设置都分配给进程。
验证的服务器和客户端上正确运行在同一台计算机。您应始终测试您的客户端和服务器运行的正确本地 ; 也就是在同一计算机上远程运行之前。
检查是否都面临的问题实际上是通常与代码本身,一个 DCOM 问题,或如果它是特定于您的应用程序的编码问题。通过使用只山蔽是一种或两个非常简单的方法创建一个非常简单的客户端/服务器应用程序来执行此 *** 作。按照正常的过程的打包和安装。如果您的服务器引发的事件,然后在小示例也应引发事件。 有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
266717如何使用 Visual Basic 创建 DCOM 客户端/服务器应用程序
267836如何使用 Visual Basic 事件与创建 DCOM 客户端/服务器
理想情况下,您应使用上述文章原则是,因为它们带您逐步通过从头最终打包和部署。在您使用的为您的应用程序和查看这是否正常工作,请使用相同的设置。如果您的问题与 DCOM 相关,您面临着同样的问题对小示例应用程序中一样。直到您找到问题的保留故障排除较小的示例问题。 如果小应用程序工作正常但您自己的应用程序不能使用相同的设置,则您可以将面临两个问题:
您的代码中的某些内容就创建问题。例如对于如果在您的代码和您的服务器的身份访问的数据库不具有执行此 *** 作的权限。如果您试图访问的文件或其他对象进行实例化同样的问题,就会发生这种情况。
您的代码很好,但在该注册表如到您的服务器的多个条目中有一些问题。 有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
180525PRB: Dcomcnfg 报告 DCOM 服务器的多个副本
客户端计算机指向错误的服务器计算机。请检查该位置中选项卡 Dcomcnfg 在客户端计算机上。有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
268550如何为 Visual Basic DCOM 客户端/服务器应用程序使用 Dcomcnfg
请验证您具有打包并安装客户端和服务器正确。正确地创建分发程序包是成功的安装基础。有关如何创建 DCOM 客户端/服务器应用程序使用 Visual Basic 分步示例的其他信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
266717如何使用 Visual Basic 创建 DCOM 客户端/服务器应用程序
267836如何使用 Visual Basic 事件与创建 DCOM 客户端/服务器
验证您的网络正常工作,由客户端从服务器计算机和服务器从客户端计算机执行 ping *** 作。在服务器上打开一个命令提示符窗口,然后执行下面的命令前面 ClientcomputerName 应在客户端计算机的名称:
Ping ClientcomputerName
如果一切工作正常,您应该看到三个或四个答复,在每个时间。如果您看到超时或其他错误,您的网络设置过程中遇到问题,您需要在继续之前,请修复这些。重复使用服务器的计算机名称在客户端计算机上相同的步骤。
在客户端计算机上的 Dcomcnfg,更改通过该服务器的名称替换为服务器的 IP 地址的服务器的位置。如果它工作正常使用的 IP 地址而不是与服务器的计算机名称,然后多个可能必须与您的网络设置的问题。
请尝试重新启动服务器和客户端。有时某些设置缓存在内存和 $ 重新启动后在 Dcomcnfg 中进行更改后,问题解决了。
在 Windows 95 或 Windows 98,使用 $ TCP/IP 协议。若要执行此 *** 作删除 Dcomcnfg 中的默认协议列表中的所有其他协议。
通常,如果 DCOM 问题您得到错误当您试图通过调用 CreateObject 函数或设置对象变量,用 New 关键字实例化远程对象。能够区分如果您收到一条错误消息,由于在创建该对象本身,或者是由于在对象的初始化事件在做什么重要的。如果您试图实例化的对象的初始化事件没有任何的代码,那么毫无疑问您收到该错误与对象的实例化相关。 如果您然而,在初始化事件中的连接到数据库或其他的对象进行实例化的代码应包括内部 Initialize 事件捕获错误,并引发自定义用户错误。如果您不补漏白您内部 Initialize 事件的错误,并且会产生错误,它冒泡出到客户端,并可能将您相混淆。您可能会认为问题在于对象创建时存在的问题是在初始化代码的实际事件。
如果服务器运行在 Microsoft Windows NT 4 或 Microsoft Windows 2000 中,您可以使用事件查看器以了解有关 DCOM 连接失败的原因的其他审核信息。但是,记录这些类型的事件是通常不启用默认情况下。您需要设置审核选项以启用它。
在 Windows NT 4 中启用这些选项,如下所示:
在 Windows 2000 中启用这些选项,如下所示:
一旦激活这些日志记录选项再次测试您的客户端。您收到错误消息后,使用事件查看器查看是否存在任何 DCOM 事件。该事件可能会告诉您原因,访问被拒绝。此外,它可以告诉您谁已登录到客户端计算机上,如果这是一个域用户或本地用户。它可以告诉您客户端请求的协议不是服务器,等上可用。通常,COM 日志被添加到系统日志中。
在 开始 菜单上选择 程序,选择 管理工具,然后选择 本地安全策略。
在左边的窗格中,您将看到一个树视图。单击加号 (+) 号左边的 本地策略,您看到 审核策略 项。选择 审核策略项,请注意在右窗格包含一个已启用哪些,其中一个不是哪些的所有审核选项。右键单击在下列任一选项使您可以启用或禁用它们。
启用审核成功和失败的以下选项: 审核登录事件、 审核对象访问、 审核特权使用。
关闭 本地安全策略 窗口。
在 开始 菜单上选择 程序,选择 管理工具,然后选择 用户管理器。
如果运行的 NT 4 服务器您必须选择一个域 ; 在这种情况下 用户 菜单上选择 域 选项,然后选择本地计算机。
在 策略 菜单上选择 审核 选项。启用审核的成功和失败的前三个项: 登录/注销、 文件和对象访问使用的用户权限。 单击 确定 并关闭用户管理器。
如果您的服务器有多个类和这些类的某些工作,并且其他人不要,检查 Dcomcnfg 中在客户端计算机上的每个类条目。默认状态下,每个类都有其自己的 AppID,并因此,自己设置以便可以正确设置了一些您的类和其他人并不是。 有关客户端的应用程序列表中定位您的服务器的其他信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
268550如何为 Visual Basic DCOM 客户端/服务器应用程序使用 Dcomcnfg
运行时错误 70: 拒绝
此错误通常与安全设置。此错误是一个比较好的提示方法调用到达目标计算机,所以网络连接可能不是问题在此处。下面是要检查的几个事项:
如果将身份验证级别设置为 连接,验证域用户,而不是本地用户以登录用户登录到客户端计算机。
如果将身份验证级别设置为 连接,验证在服务器计算机实际上属于域。 如果独立的计算机它无法验证该用户,除非您在客户端和服务器计算机上有一个匹配的用户名称/密码。
如果将身份验证级别设置为 无,则检查如果您已设置为客户端和服务器计算机上无此选项。
如果您设置为 无 身份验证级别,并且您已经验证两台计算机有正确的此设置确保客户端和服务器应用程序都不设置以编程方式使用功能,如 CoInitializeSecurity 或 CoSetProxyBlanket 身份验证。以编程方式设置身份验证将覆盖从 Dcomcnfg 该注册表项。
如果您将身份验证级别设置为 无,并且您有非域用户选中如果您在权限包括"每个人"(或"的 World"的 Windows 95 和 Windows 98),并启动权限。
检查所的访问权限和 $ 启动 Dcomcnfg 中的权限,并验证用户登录到客户端计算机上显式包含在这些列表,或属于一个组包含用户。
本文中稍后介绍,请参见"已知问题以检查"。有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
216051FIX: Dcomcnfg NT 4.0 SP4 做不写下 HKCR\APPID.Exe 文件名
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)