завершение работы ActiveX exe

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

завершение работы ActiveX exe

Сообщение Alex_2005 » 11.01.2006 (Ср) 17:03

Привет всем!! У меня проблемма: есть ActiveX exe. ActiveX exe стартуется при помощи другой программы. Если стартовать третью программу, которая тоже использует ActiveX exe, то проверяется ROTHook таблица. Если тав внесены данные об ActiveX exe, то программа использует уже запущенный ActiveX exe. Если нет, то создаёт новый ActiveX exe. Проблемма в том, что если я хочу закрыть ActiveX exe, то СlassTerminate не происходит,т.к. имеются поинтеры на ActiveX exe. Как завершить работу ActiveX exe даже если другие программы имеют поинтер на ActiveX exe?
Guten Morgen! А если не Guten, то тогда это и не Morgen...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.01.2006 (Ср) 17:16

И что будут делать те программы?
Ничё, если они случайно вызовут BSOD при работе с несуществующим объектом?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 11.01.2006 (Ср) 17:25

причём здесь это??? вопрос в том, что я хочу завершить работу ActiveX exe даже если другие программы имеют поинтер на ActiveX exe.
Guten Morgen! А если не Guten, то тогда это и не Morgen...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 11.01.2006 (Ср) 17:39

TerminateProcess?
Лучший способ понять что-то самому — объяснить это другому.

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 11.01.2006 (Ср) 17:50

TerminateProcess?? эта функция нужна если ты хочешь завершить работу программы из другой программы. А мне нужно, чтоб ActiveX exe сама себя терминирует!! С таким же успехом я мог бы использовать End вместо TerminateProcess. Но тогда происходит тяжёлая системная ошибка, потому что другие программы поинтеры имеют на мою эктив икс. Да к тому же после End программы всё ещё имеют поинтеры , но уже на несуществующий ActiveX exe.
Guten Morgen! А если не Guten, то тогда это и не Morgen...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.01.2006 (Ср) 18:08

Прочитай http://bbs.vbstreets.ru/viewtopic.php?p=6578173#6578173
Прочитай http://bbs.vbstreets.ru/viewtopic.php?p=6578188#6578188, трижды.
И подумай об адекватности изначального вопроса в свете этих ссылок.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 11.01.2006 (Ср) 18:16

Слушай... можешь просто сказать , возможно ли такое или нет... я же не спрашивл адекватен ли мой вопрос или нет.. передо мной стоит поставленная задача. И мне нужно найти решение.. решения может и небыть. так вот вопрос: есть ли решение или нет . если есть то какое.. или я вопрос не понятно задал? скажи. попытаюсь разъеснить.
Guten Morgen! А если не Guten, то тогда это и не Morgen...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.01.2006 (Ср) 18:44

Сложно разъяснять.
По причине того, что ты сам в http://bbs.vbstreets.ru/viewtopic.php?p=6578188#6578188 себе ответил, что это невозможно. Очень прямым текстом. Нечего добавить.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 11.01.2006 (Ср) 18:53

ну, если это невозможно... то тогда это противоречие какоето... к примеру... если Client зависнет , то тогда невозможно завершить работу Server'а, так как всё ещё есть поинтер от Client!!! Разве это не маразм??? Получается, невозможно сделать стабильную ActiveX exe!
Guten Morgen! А если не Guten, то тогда это и не Morgen...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.01.2006 (Ср) 20:37

Alex_2005 писал(а):Получается, невозможно сделать стабильную ActiveX exe!

Да, ты прав. То, что Word стабильно работает, это мистификация Microsoft.
Lasciate ogni speranza, voi ch'entrate.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: завершение работы ActiveX exe

Сообщение codemaster » 12.01.2006 (Чт) 2:04

Alex_2005 писал(а):Привет всем!! У меня проблемма: есть ActiveX exe. ActiveX exe стартуется при помощи другой программы. Если стартовать третью программу, которая тоже использует ActiveX exe, то проверяется ROTHook таблица. Если тав внесены данные об ActiveX exe, то программа использует уже запущенный ActiveX exe. Если нет, то создаёт новый ActiveX exe. Проблемма в том, что если я хочу закрыть ActiveX exe, то СlassTerminate не происходит,т.к. имеются поинтеры на ActiveX exe. Как завершить работу ActiveX exe даже если другие программы имеют поинтер на ActiveX exe?



сделай на сервере хранилище клиентских CallBack
когда сервер хочет завершить работу он через CallBack оповещает клиентов ( клиент разрывает соедиенение с сервером)
затем сервер выгружается

если клиент повиснет то естественно сервер выгрузится !
(только тебе придется подаждать минуток эдак 15 8)) )
вообще взаимоотношениями клиента и сервера командует SCM
настройки timeout можно покрутить в реестре (но не рекомендую)

P.S. Проверять наличие стартовавшего ActiveX.exe через ROT -
не лучшее решение
//<-
Mit freundlichen Grüßen
//->

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 12.01.2006 (Чт) 10:19

просто так, к слову: RotHook предложил как решение использования уже запущеной ActiveX.exe один из разработчиков Microsoft.
Guten Morgen! А если не Guten, то тогда это и не Morgen...

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 12.01.2006 (Чт) 10:34

Alex_2005 завершайся эндом. Никакого BSOD'а не должно быть, по крайней мере у меня не было. Просто появляется RT Error 'Server terminated' ил что-то типа того. А этот RT Error можно отловить...

А если серьезно, то надо просто оповещать все объекты, которые имеют ссылку на объекы этого EXE о необходимости удаления этих ссылок.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 12.01.2006 (Чт) 12:21

Alex_2005 писал(а):просто так, к слову: RotHook предложил как решение использования уже запущеной ActiveX.exe один из разработчиков Microsoft.



боюсь в не поняли друг друга 8)

для этого у класса есть свойство Instancing
рекомендую поcмотреть !

BSOD'а не будет (хотя под 98/Me ..... ) так как это - out-of-process server :wink:

P.S. завершать работу ENDом - дело совести.
если честно то часто самому приходится 'лабать' если сроки жмут
//<-
Mit freundlichen Grüßen
//->

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

CoDisconnectObject

Сообщение Vi » 13.01.2006 (Пт) 9:45

Ну а почему не написать стоп-клиента, который обращался бы к ROT за существующим объектом (а он ведь существует, правда?) и вызывал некий метод, который завершал бы работу этого объекта. А чтобы отсоединиться от разных зависших клиентов (в частности и от самого вызывающего стоп-клиента), существует функция COM - CoDisconnectObject, которую должен вызвать сам объект непосредственно.

Нужно ещё и из ROT ссылку на себя удалить, но, я думаю, что ROTHook-er это делает.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Сообщение Alex_2005 » 13.01.2006 (Пт) 12:19

ANDLL писал(а):Alex_2005 завершайся эндом. Никакого BSOD'а не должно быть, по крайней мере у меня не было. Просто появляется RT Error 'Server terminated' ил что-то типа того. А этот RT Error можно отловить...

А если серьезно, то надо просто оповещать все объекты, которые имеют ссылку на объекы этого EXE о необходимости удаления этих ссылок.


кстати, как отловить эту ошибку и не допустить появление сообщения об ошибке?
Guten Morgen! А если не Guten, то тогда это и не Morgen...

Alex_2005
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 242
Зарегистрирован: 07.04.2005 (Чт) 17:09
Откуда: Germany, Baden-Wurttemberg, Bietigheim-Bissingen

Re: CoDisconnectObject

Сообщение Alex_2005 » 13.01.2006 (Пт) 12:52

Vi писал(а):Ну а почему не написать стоп-клиента, который обращался бы к ROT за существующим объектом (а он ведь существует, правда?) и вызывал некий метод, который завершал бы работу этого объекта. А чтобы отсоединиться от разных зависших клиентов (в частности и от самого вызывающего стоп-клиента), существует функция COM - CoDisconnectObject, которую должен вызвать сам объект непосредственно.

Нужно ещё и из ROT ссылку на себя удалить, но, я думаю, что ROTHook-er это делает.


как использовать эту функцию??? в инете не нашёл подробную инфу. Кроме того хотел спросить существаует ли она в Win98 , NT, 2000.
Guten Morgen! А если не Guten, то тогда это и не Morgen...

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: CoDisconnectObject

Сообщение codemaster » 13.01.2006 (Пт) 13:22

Alex_2005 писал(а):
Vi писал(а):Ну а почему не написать стоп-клиента, который обращался бы к ROT за существующим объектом (а он ведь существует, правда?) и вызывал некий метод, который завершал бы работу этого объекта. А чтобы отсоединиться от разных зависших клиентов (в частности и от самого вызывающего стоп-клиента), существует функция COM - CoDisconnectObject, которую должен вызвать сам объект непосредственно.

Нужно ещё и из ROT ссылку на себя удалить, но, я думаю, что ROTHook-er это делает.


как использовать эту функцию??? в инете не нашёл подробную инфу. Кроме того хотел спросить существаует ли она в Win98 , NT, 2000.


Private Declare Function CoDisconnectObject Lib "ole32.dll" (ByVal pUnk As IUnknown, pvReserved As Long) As Long



RevokeActiveObject - ты удаляеш из ROT ссылку
затем вызывается CoDisconnectObject

может у тебя грабли в этом?
//<-
Mit freundlichen Grüßen
//->

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 13.01.2006 (Пт) 14:20

Alex_2005 писал(а):
ANDLL писал(а):Alex_2005 завершайся эндом. Никакого BSOD'а не должно быть, по крайней мере у меня не было. Просто появляется RT Error 'Server terminated' ил что-то типа того. А этот RT Error можно отловить...

А если серьезно, то надо просто оповещать все объекты, которые имеют ссылку на объекы этого EXE о необходимости удаления этих ссылок.


кстати, как отловить эту ошибку и не допустить появление сообщения об ошибке?

Здрасте. On error goto...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 53

    TopList  
cron