Пытаюсь написать небольшой opc клиент на java с использованием библиотеки utgard.
Помимо utgard подключил к проекту j-interop.
Код приложения достаточно прост:
AutoReconnectController autos = null;
JISystem.setAutoRegisteration(true);
ConnectionInformation ci = new ConnectionInformation ();
ci.setProgId("Matrikon.OPC.Simulation.1");
ci.setUser("Admin");
ci.setPassword("212");
final Server server = new Server ( ci, Executors.newSingleThreadScheduledExecutor());
autos = new AutoReconnectController(server);
try{
autos.connect();
Group group = server.addGroup("...");
...
Но при запуске возникает ошибка:
org.jinterop.dcom.common.JIException: Message not found for errorCode: 0xC0000034
at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenHKLM(JIWinRegStub.java:115)
at org.jinterop.dcom.core.JIProgId.getIdFromWinReg(JIProgId.java:130)
at org.jinterop.dcom.core.JIProgId.getCorrespondingCLSID(JIProgId.java:162)
at org.jinterop.dcom.core.JIComServer.<init>(JIComServer.java:413)
at org.openscada.opc.lib.da.Server.connect(Server.java:123)
at org.openscada.opc.lib.da.AutoReconnectController.performReconnect(AutoReconnectController.java:217)
at org.openscada.opc.lib.da.AutoReconnectController.access$3(AutoReconnectController.java:190)
at org.openscada.opc.lib.da.AutoReconnectController$1.run(AutoReconnectController.java:173)
at java.lang.Thread.run(Thread.java:619)
Caused by: jcifs.smb.SmbException: The system cannot find the file specified.
at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:522)
at jcifs.smb.SmbTransport.send(SmbTransport.java:622)
at jcifs.smb.SmbSession.send(SmbSession.java:239)
at jcifs.smb.SmbTree.send(SmbTree.java:109)
at jcifs.smb.SmbFile.send(SmbFile.java:718)
at jcifs.smb.SmbFile.open0(SmbFile.java:923)
at jcifs.smb.SmbFile.open(SmbFile.java:940)
at jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:142)
at jcifs.smb.TransactNamedPipeOutputStream.<init>(TransactNamedPipeOutputStream.java:32)
at jcifs.smb.SmbNamedPipe.getNamedPipeOutputStream(SmbNamedPipe.java:187)
хер
at rpc.ncacn_np.RpcTransport.attach(RpcTransport.java:92)
at rpc.Stub.attach(Stub.java:106)
at rpc.Stub.call(Stub.java:110)
at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenHKLM(JIWinRegStub.java:113)
... 8 more
Не совсем понимаю на отсутствие какого файла происходит исключение (SmbException: The system cannot find the file specified).
Может кто нибудь сталкивался с подобными проблемами, пожалуйста, просьба помочь.
не сталкивался, но стоит проверить включен ли, вообще, remote registry service
control panel/"Administrative Tools,"/"Services." Locate the Remote Registry service on the list, and click "Start this service."
Спасибо за отклики!
После включения remote registry service ошибка стала другой:
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.winreg.smb.JIWinRegStub.winreg_OpenKey(JIWinRegStub.java:197)
at org.jinterop.dcom.core.JIProgId.getIdFromWinReg(JIProgId.java:131)
at org.jinterop.dcom.core.JIProgId.getCorrespondingCLSID(JIProgId.java:162)
at org.jinterop.dcom.core.JIComServer.<init>(JIComServer.java:413)
at org.openscada.opc.lib.da.Server.connect(Server.java:123)
at org.openscada.opc.lib.da.AutoReconnectController.performReconnect(AutoReconnectController.java:217)
at org.openscada.opc.lib.da.AutoReconnectController.access$3(AutoReconnectController.java:190)
at org.openscada.opc.lib.da.AutoReconnectController$1.run(AutoReconnectController.java:173)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.jinterop.dcom.common.JIRuntimeException: 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.winreg.IJIWinReg$openKey.read(IJIWinReg.java:939)
at ndr.NdrObject.decode(NdrObject.java:36)
at rpc.ConnectionOrientedEndpoint.call(ConnectionOrientedEndpoint.java:137)
at rpc.Stub.call(Stub.java:113)
at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenKey(JIWinRegStub.java:191)
... 8 more
Здравствуйте, bl-blx, Вы писали:
BB>Здравствуйте, Sabroza, Вы писали:
S>>Логин пароль ввожу верные (админские), разрешения файловой системы переставил как надо, пока ничего не помогает.
BB>Родной DCOM-клиент нормально коннектится?
К сожалению, не очень представляю как это проверить. Можете подсказать?
Здравствуйте, Sabroza, Вы писали:
S>Здравствуйте, bl-blx, Вы писали:
BB>>Здравствуйте, Sabroza, Вы писали:
S>>>Логин пароль ввожу верные (админские), разрешения файловой системы переставил как надо, пока ничего не помогает.
BB>>Родной DCOM-клиент нормально коннектится?
S>К сожалению, не очень представляю как это проверить. Можете подсказать?
S>Настройки доступа выставлял как указано в статье http://www.aggsoft.ru/asdl-dcom-opc-config-4.htm S>Может я что то упускаю...
Я просто хотел убедиться, что политики безопасности правильно настроены.
Но, коли вы строго по инструкции всё сделали, то проблема в другом.
У них на сайте нет тестового клиента, случаем?
Здравствуйте, bl-blx, Вы писали:
BB>Я просто хотел убедиться, что политики безопасности правильно настроены. BB>Но, коли вы строго по инструкции всё сделали, то проблема в другом. BB>У них на сайте нет тестового клиента, случаем?
S>Логин пароль ввожу верные (админские), разрешения файловой системы переставил как надо, пока ничего не помогает.
привет, ещё раз.
я небольшой спец по виндам или j-interop, но судя по стеку — разрешение должны быть на реестр, точнее read разрешение на ключ в реестре.
краткая пробежка по гуглу дала это
Run Powershell as an Administrator, then run the commandlet "Enable-PSRemoting".
попробуй. если поможет ок, если нет пробегись по j-interop форуму.