Ошибка при выполнении команды "ИР перейти к определению" воспроизводится стабильно.
ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 605 / Внешнее исключение (System.Runtime.InteropServices.COMException): Событие не смогло вызвать ни одного из абонентов (Исключение из HRESULT: 0x80040201)}
ТурбоКонф.УстановитьЗначение(ИмяВременногоФайла);
---> System.Runtime.InteropServices.COMException: Событие не смогло вызвать ни одного из абонентов (Исключение из HRESULT: 0x80040201)
в UIAutomationClient.IUIAutomation.GetFocusedElement()
в TurboConf.Core.TurboAPI.TurboApi.SetValue(String text)
в lambda_method(Closure , Api , IValue[] )
в ScriptEngine.Machine.Contexts.AutoContext`1.CallAsProcedure(Int32 methodNumber, IValue[] arguments)
в ScriptEngine.Machine.MachineInstance.ResolveMethodProc(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
--- Конец трассировки внутреннего стека исключений ---
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
в ScriptEngine.Machine.MachineInstance.ExecuteCode()
в ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, Int32 methodIndex, IValue[] arguments)
в ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в TurboConf.HostApplication.HostApplicationForm.ExecuteScript(Script script, Keys ctrl, Keys alt, Keys shift, ScreenForm statusForm, String entryPoint, IVariable[] parameters, ScriptOptions options)
[File?path=1165DFE919CB05373C26DFFD93BA26DF9DD382C5&filename=Ссылка скрыта
#1, ред. 11 ноября 2023 14:59
Это значит фокус еще не установился в поле ввода. Если происходит ожидание октрытия окна, то нужно либо добавить задержку после
Окно = ТурбоКонф.ЖдатьОкно("Сохранить точки останова в файл", 2000, Истина);
Либо выполнять вызовы с отслеживанием смены RuntimeId
ТекРантаймИД = ТурбоКонф.ЖдатьСменуТекущегоЭлемента(ТекРантаймИД, Таймаут, ВызыватьИсключение)
#2, 11 ноября 2023 16:30
Замечу, что на 5-й версии этот код никогда выдавал такую ошибку. А на 6-й версии ее всегда выдает. Так что кажется дело в чем то другом.
#3, 11 ноября 2023 17:20
Перед ошибочной строкой добавил
ТурбоКонф.ЖдатьСменуТекущегоЭлемента(ТурбоКонф.ПолучитьRuntimeId(), 100, Истина);
Ошибка в той строке перестала возникать.
Но такая же ошибка стала возникать далее при вызове
ТурбоКонф.ПолучитьЭлементыСписка();
ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 506 / Внешнее исключение (System.Runtime.InteropServices.COMException): Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)}
ТекстыПолей = ТурбоКонф.ПолучитьЭлементыСписка(); // 200мс!
---> System.Runtime.InteropServices.COMException: Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)
в UIAutomationClient.IUIAutomation.GetFocusedElement()
в TurboConf.Core.TurboAPI.TurboApi./nQ3C'txC: [H}m&n:virdrz).MoveNext()
Я добавил перед ней такую же строку. Но это не помогло.
ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 502 / Внешнее исключение (System.Runtime.InteropServices.COMException): Событие не смогло вызвать ни одного из абонентов (Исключение из HRESULT: 0x80040201)}
ТурбоКонф.ЖдатьСменуТекущегоЭлемента(ТурбоКонф.ПолучитьRuntimeId(), 500, Истина);
---> System.Runtime.InteropServices.COMException: Событие не смогло вызвать ни одного из абонентов (Исключение из HRESULT: 0x80040201)
в UIAutomationClient.IUIAutomation.GetFocusedElement()
[File?path=1165DFE919CB05373C26DFFD93BA26DF9DD382C5&filename=Ссылка скрыта
#4, 11 ноября 2023 17:23
Метод ЖдатьСменуТекущегоЭлемента() есть в 5-й версии?
#5, 11 ноября 2023 17:50
(4) tormozit, да
#6, 11 ноября 2023 17:55
Я давно использую реализацию с ожиданием, т.к. часто встречал подобную ошибку при открытии окон Сохранить, Загрузить. Окно появляется, но фокус еще приходит.
Проверил еще раз у себя, с ожиданием, все работает стабильно.
#7, ред. 11 ноября 2023 18:05
Еще раз отмечаю, что у меня стабильно возникает ошибка при вызове ТурбоКонф.ПолучитьЭлементыСписка() только на 6-й версии. И перед этим вызовом я тоже добавил ЖдатьСменуТекущегоЭлемента().
Вот мой скрипт.
File?path=1165DFE919CB05373C26DFFD93BA26DF9DD382C5%2F49b967c5cbce484c9eb65a6c441f233f&filename=RDT.os
Ошибку и лог я сообщил выше.
#8, 13 ноября 2023 17:38
bolsun изменил статус на Закрыто
#9, ред. 13 ноября 2023 19:18
Проблема осталась. Прошу более четко описать пример для 6-й версии.
Я провел тесты 30 раз и пробовал кучу способов. Но всегда у меня возникают ошибки. Вот они
1.
ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 604 / Внешнее исключение (System.Runtime.InteropServices.COMException): Событие не смогло вызвать ни одного из абонентов (Исключение из HRESULT: 0x80040201)}
ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 1000, Истина);
2.
ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 506 / Внешнее исключение (System.Runtime.InteropServices.COMException): Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)}
ТекстыПолей = ТурбоКонф.ПолучитьЭлементыСписка(); // 200мс!
3.
ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 635 / Внешнее исключение (System.Runtime.InteropServices.COMException): Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)}
СтарыйИД = ТурбоКонф.ПолучитьRuntimeId();
код
Вот тестируемая версия скрипта.
RDT.os
Нужно встать на вызов любой прикладной функции от объекта и вызвать команду "ИР Перейти к определению"
tormozit изменил статус на Открыто
#10, 13 ноября 2023 19:30
Проверил еще раз на 5-й версии. Там тот же скрипт работает без ошибок
и с вызовом ТурбоКонф.ЖдатьСменуТекущегоЭлемента() и без него.
#11, ред. 13 ноября 2023 19:36
(9) tormozit,
Эти ошибки скорее всего возникают из-за слишком малого таймаута ожидания соединения. Он будет увеличен в следующей версии.
#12, ред. 14 ноября 2023 07:39
Проверил. Работает.
Причем без вызова ТурбоКонф.ЖдатьСменуТекущегоЭлемента(), что мне кажется говорит о бесполезности применения этой функции для этой цели.
#13, 14 ноября 2023 07:40
tormozit изменил статус на Закрыто
#14, ред. 22 ноября 2023 16:46
Проблема снова случилась
ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 646 / Внешнее исключение (System.Runtime.InteropServices.COMException): Событие не смогло вызвать ни одного из абонентов (Исключение из HRESULT: 0x80040201)}
СтарыйИД = ТурбоКонф.ПолучитьRuntimeId();
---> System.Runtime.InteropServices.COMException: Событие не смогло вызвать ни одного из абонентов (Исключение из HRESULT: 0x80040201)
в UIAutomationClient.IUIAutomation.GetFocusedElement()
в TurboConf.Core.TurboAPI.TurboApi.GetCurrentElementRuntimeId(Int32 parentLevels)
в TurboConf.HostApplication.Api.GetCurrentElementRuntimeId()
в lambda_method(Closure , Api , IValue[] )
в ScriptEngine.Machine.Contexts.AutoContext`1.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в ScriptEngine.Machine.MachineInstance.ResolveMethodFunc(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
--- Конец трассировки внутреннего стека исключений ---
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
в ScriptEngine.Machine.MachineInstance.ExecuteCode()
в ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, Int32 methodIndex, IValue[] arguments)
в ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в TurboConf.HostApplication.HostApplicationForm.ExecuteScript(Script script, Keys ctrl, Keys alt, Keys shift, ScreenForm statusForm, String entryPoint, IVariable[] parameters, ScriptOptions options)
Ссылка скрыта
tormozit изменил статус на Открыто
#15, 22 ноября 2023 16:50
(14) tormozit, RuntimeId нужно получить до нажатия Enter, т.к. в этот момент окна уже не существует, а фокус еще не перешел в конфигуратор
#16, 25 ноября 2023 11:43
Проблема актуальна?
bolsun изменил статус на На выяснении
#17, ред. 25 ноября 2023 13:36
Да. Последний раз возникала вчера. Но код скрипта я пока не менял.
#18, 25 ноября 2023 23:38
Тикет пока закрываю, если проблема повторится, нужен новый лог с учетом моих рекомендаций в #15. Также заранее прошу не обрезать шапку лога, мне нужна информация оттуда.
bolsun изменил статус на Закрыто