Как завершить соединение ОЛЕ? #358276


#0 by Alter72
Цепляюсь из v8 к v7: БазаОЛЕ = COMObject("V77.Application", "servername") Соответственно семерка запускается и работает на компе servername Все подключается и работает прекрасно. Внимание вопрос: как завершить соединение чтобы семерка закрылась? На локальном соединении прокатывает присвоение БазаОЛЕ = "", но при запуске на серваке процесс семерки остается висеть после этого.
#1 by kosts
вроде.
#2 by Alter72
БазаОЛЕ . завершениеработысистемы на такое говорит "неизвестный метод". а если вызывать через БазаОЛЕ.EvalExpr("завершениеработысистемы") Говорит "исключение, попытка вызвать процедуру как функцию"
#3 by kosts
А если в 7 сделать функцию которая вызовет завершениеработысистемы?
#4 by НЕА123
не помню, и семерки нет... но вроде типа так:
#5 by НЕА123
+ в смысле EvalExpr(то бишь  Вычислить) должно что-то возвращать, а Выполнить не обязательно.
#6 by НЕА123
#7 by Alter72
ну "Выполнить" это вы сами придумали. 7ка такого не знает ;) Чтобы не править конфу сделали внешнюю обработку для 7ки с завершением работы при открытии. Если запускать эту обработку руками, все прекрасно закрывается. При запуске через ОЛЕ удивительным образом продолжает работать дальше! Причем в отладчике 7ки видно что в обработку заходит и ЗавершитьРаботуСистемы выполняет! Полтергейст... Причем не могу даже обоснования такому поведению придумать.
#8 by Irbis
Диалогового окна при завершении работы системы не возникает?
#9 by Alter72
если руками запускать обработку закрытия, то ниче не спрашивает. А че там происходит когда запущена через ОЛЮ  неизвестно - окошко-то не появляется.
#10 by smaharbA
#11 by Alter72
[code]БазаОле.ЗавершитьРаботуСистемы;[/code] Выполняет без ошибки, но Оле база кладет на такие завершения - как был сеанс пользователя запущен, так и остается висеть, блокируя повторные подключения под ним.
#12 by Irbis
Бывает диалог подтверждения выхода вызывается. Не знаю почему, но бывает процесс висит пока форму, из которой запустили ОЛЕ, не закроешь. Как с этим бороться хз.
#13 by Roin
БазаОле = "" и усё
#14 by Alter72
см : не работает!!
#15 by Torquader
Вообще-то, завершением OLE-серверов ведает определённый сервис в системе, и он должен удалять объекты из памяти после того, как на них не осталось ни одной ссылки. Поэтому надо и БазаОле=0 и сбросить все дочерние переменные, так как некоторые из них просто подвешивают процесс. Вариант №2 - создавать на сервере не семёрку, а другое приложение, которое может вызвать семёрку через OLE, тогда семёрку можно будеть успешно завершить присвоением Семёрка=0, а это "несчастное" приложение может ожидать следующего запроса или его можно тупо "прибить" через WMI.
#16 by Alter72
А по подробнее: че за сервис? где он выполняется (на клиенте откуда инициирую OLE-соединение, или на сервере где запускается OLE-приложение)? Первый раз такое слышу: это собственные предположения или документированно (ссылку)? по Варианту 2: ...и реализовать в этом приложении обертки для вызовов всех методов 7ки??
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С