|
Как завершить соединение ОЛЕ? | ☑ | ||
---|---|---|---|---|
0
Alter72
28.08.08
✎
09:17
|
Цепляюсь из v8 к v7:
БазаОЛЕ = COMObject("V77.Application", "servername") Соответственно семерка запускается и работает на компе servername Все подключается и работает прекрасно. Внимание вопрос: как завершить соединение чтобы семерка закрылась? На локальном соединении прокатывает присвоение БазаОЛЕ = "", но при запуске на серваке процесс семерки остается висеть после этого. |
|||
1
kosts
28.08.08
✎
10:08
|
БазаОЛЕ . завершениеработысистемы()
вроде. |
|||
2
Alter72
28.08.08
✎
10:44
|
(1) БазаОЛЕ . завершениеработысистемы()
на такое говорит "неизвестный метод". а если вызывать через БазаОЛЕ.EvalExpr("завершениеработысистемы()") Говорит "исключение, попытка вызвать процедуру как функцию" |
|||
3
kosts
28.08.08
✎
10:54
|
А если в 7 сделать функцию которая вызовет завершениеработысистемы()?
|
|||
4
НЕА123
28.08.08
✎
10:59
|
(2) не помню, и семерки нет... но вроде типа так:
БазаОЛЕ.Выполнить("завершениеработысистемы()") |
|||
5
НЕА123
28.08.08
✎
11:02
|
(4)+ в смысле EvalExpr(то бишь Вычислить()) должно что-то возвращать, а Выполнить() не обязательно.
|
|||
6
НЕА123
28.08.08
✎
11:03
|
(3)
функция Завершить() ЗавершитьРаботуСистемы(); возврат 1; КонецФункции; |
|||
7
Alter72
28.08.08
✎
14:16
|
(4)(5) ну "Выполнить()" это вы сами придумали. 7ка такого не знает ;)
(6) Чтобы не править конфу сделали внешнюю обработку для 7ки с завершением работы при открытии. Если запускать эту обработку руками, все прекрасно закрывается. При запуске через ОЛЕ удивительным образом продолжает работать дальше! Причем в отладчике 7ки видно что в обработку заходит и ЗавершитьРаботуСистемы() выполняет! Полтергейст... Причем не могу даже обоснования такому поведению придумать. |
|||
8
Irbis
28.08.08
✎
14:21
|
(7) Диалогового окна при завершении работы системы не возникает?
|
|||
9
Alter72
29.08.08
✎
06:48
|
(8) если руками запускать обработку закрытия, то ниче не спрашивает. А че там происходит когда запущена через ОЛЮ неизвестно - окошко-то не появляется.
|
|||
10
smaharbA
29.08.08
✎
07:07
|
|
|||
11
Alter72
04.09.08
✎
10:43
|
[code]БазаОле.ЗавершитьРаботуСистемы(0);[/code]
Выполняет без ошибки, но Оле база кладет на такие завершения - как был сеанс пользователя запущен, так и остается висеть, блокируя повторные подключения под ним. |
|||
12
Irbis
04.09.08
✎
10:56
|
(9) Бывает диалог подтверждения выхода вызывается.
Не знаю почему, но бывает процесс висит пока форму, из которой запустили ОЛЕ, не закроешь. Как с этим бороться хз. |
|||
13
Roin
04.09.08
✎
11:20
|
БазаОле = "" и усё
|
|||
14
Alter72
04.09.08
✎
11:26
|
(13) см (0): не работает!!
|
|||
15
Torquader
04.09.08
✎
12:04
|
Вообще-то, завершением OLE-серверов ведает определённый сервис в системе, и он должен удалять объекты из памяти после того, как на них не осталось ни одной ссылки. Поэтому надо и БазаОле=0 и сбросить все дочерние переменные, так как некоторые из них просто подвешивают процесс.
Вариант №2 - создавать на сервере не семёрку, а другое приложение, которое может вызвать семёрку через OLE, тогда семёрку можно будеть успешно завершить присвоением Семёрка=0, а это "несчастное" приложение может ожидать следующего запроса или его можно тупо "прибить" через WMI. |
|||
16
Alter72
04.09.08
✎
12:38
|
(15) А по подробнее: че за сервис? где он выполняется (на клиенте откуда инициирую OLE-соединение, или на сервере где запускается OLE-приложение)?
Первый раз такое слышу: это собственные предположения или документированно (ссылку)? по Варианту 2: ...и реализовать в этом приложении обертки для вызовов всех методов 7ки?? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |