使用Utgard连接Makitron OPC Server时出现00000005未知错误
OPC DA连接权限拒绝错误(0x00000005)排查与解决
问题背景
运行UtgardTutorial2的main方法连接本地Makitron OPC Server时,出现权限拒绝错误,错误码0x00000005。已完成以下配置:
- 替换Host、Domain为当前机器信息,使用本地管理员账户的用户名和密码
- 未使用ProgId,直接配置目标Server的Clsid
- 启用计算机的Distributed COM,并在服务器和OpcEnum的DCOM配置中为用户赋予全部权限
错误日志
946 [main] INFO org.openscada.opc.lib.da.Server - Failed to connect to server org.jinterop.dcom.common.JIException: Access is denied, please check whether the [domain-username-password] are correct. Also, if not already done please check the GETTING STARTED and FAQ sections in readme.htm. They provide information on how to correctly configure the Windows machine for DCOM access, so as to avoid such exceptions. [0x00000005] at org.jinterop.dcom.core.JIComServer.init(JIComServer.java:654) at org.jinterop.dcom.core.JIComServer.initialise(JIComServer.java:561) at org.jinterop.dcom.core.JIComServer.<init>(JIComServer.java:524) at org.openscada.opc.lib.da.Server.connect(Server.java:108) at Main.main(Main.java:46) Caused by: rpc.FaultException: Received fault. (unknown) at rpc.ConnectionOrientedEndpoint.call(ConnectionOrientedEndpoint.java:147) at rpc.Stub.call(Stub.java:134) at org.jinterop.dcom.core.JIComServer.init(JIComServer.java:649) ... 4 more 958 [main] INFO org.openscada.opc.lib.da.Server - Destroying DCOM session... 958 [main] INFO org.openscada.opc.lib.da.Server - Destroying DCOM session... forked 960 [OPCSessionDestructor] INFO org.jinterop.dcom.core.JISession - About to destroy 0 sessesion which are linked to this session: 1277142807 960 [OPCSessionDestructor] INFO org.jinterop.dcom.core.JIComOxidRuntime - destroySessionOIDs for session: 1277142807 960 [OPCSessionDestructor] INFO org.openscada.opc.lib.da.Server - Destructed DCOM session 960 [OPCSessionDestructor] INFO org.openscada.opc.lib.da.Server - Session destruction took 2 ms 00000005: Unknown error (00000005)
排查方向与解决方法
1. 账户权限细节验证
- 确认用户名格式:本地账户需使用
机器名\用户名或.\用户名格式,避免错误使用域名格式 - 检查账户归属:在「计算机管理-本地用户和组」中确认账户属于Administrators组
- 验证密码:确保输入的密码与系统登录密码完全一致,避免特殊字符导致的解析问题
2. DCOM配置补全
- OPC服务器DCOM标识设置:在组件服务中找到目标Makitron OPC Server,切换到「标识」选项卡,选择「交互式用户」或指定拥有权限的管理员账户
- OpcEnum全权限配置:在DCOM配置中找到OpcEnum,进入「安全」选项卡,确保「启动和激活权限」「访问权限」「配置权限」均添加目标用户并赋予所有允许权限
- 本地安全策略调整:
- 打开「本地安全策略-本地策略-用户权限分配」,添加目标用户到「从网络访问此计算机」「通过终端服务登录」权限列表
- 检查「拒绝从网络访问此计算机」,确保目标用户不在该列表内
3. Utgard代码配置检查
- 验证Clsid正确性:通过注册表
HKEY_CLASSES_ROOT\CLSID查找Makitron OPC Server对应的Clsid,确保代码中无拼写错误 - 启用Debug日志:添加JVM参数
-DJI_LOG_LEVEL=DEBUG,查看更详细的DCOM交互日志,定位具体权限卡点 - 本地地址调整:尝试将Host设置为
localhost或127.0.0.1,部分OPC服务器对本地地址解析有特殊要求
4. 系统限制排查
- 临时关闭Windows防火墙:测试是否是防火墙拦截DCOM端口(135及动态端口)导致的问题
- 以管理员身份运行程序:右键Java程序选择「以管理员身份运行」,避免UAC权限拦截
内容的提问来源于stack exchange,提问作者Monotop
相关产品推荐
相关产品推荐

