powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Время жизни ActiveX EXE'шников
27 сообщений из 27, показаны все 2 страниц
Время жизни ActiveX EXE'шников
    #32656227
MegaDimon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста как можно управлять временем жизни ActiveX EXEэшника написанном на VB? Тоесть мне необходимо чтобы сам EXEэшник никогда не выгружался из памяти, даже если на него не ссылается ни один клиент.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #32656493
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем? непонятно...
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #32656523
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык он и не выгрузится... Это ж exe, а не dll
Word или Excel тоже ActiveX exe, пока им не сделаешь Application.Quit, они будут висеть в памяти и жрать ее большими ложками.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #32656525
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegaDimonПодскажите пожалуйста как можно управлять временем жизни ActiveX EXEэшника написанном на VB? Тоесть мне необходимо чтобы сам EXEэшник никогда не выгружался из памяти, даже если на него не ссылается ни один клиент.

:) Обычно проблема состоит в обратном: как выгрузить ActiveX EXE из памяти, если с клиентом что-то случилось.
Управление жизнью ActiveX EXE-шника у MS организовано из рук вон плохо. Это они сами подчеркивают постоянно в сравнениях DCOM vs Remoting
Грубо говоря, чтобы сделать то, что Вам нужно Вам придется "пристреливать" клиентов каким-то особым способом, чтобы они не успевали освободить ссылку. Но это... сами понимаете.

П.э. возможно Вам лучше написать например Win сервис, к-й постоянно держал бы в себе ссылку на ActiveX EXE.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #32656563
MegaDimon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For Alexey Kudinov
идея насчет сервиса с ссылкой на компонент мнен понравилась! Thanks ;)

For Antonariy
Еще как выгрузиться! Только последний клиент отключается и тутже вылетает.

For raur
Сервер помимо предоставления интерфейсов клиентам еще выполняет другие функции по сбору и обработке информации. Клиенты подключаютя через DCOM только для просмотра данных накопленных сервером и задание настроек.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #32656628
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем держать его в памяти?
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #32656765
MegaDimon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтобы он работал. Если клиентов нет он все равно должен собирать информацию и в базу данных ее пихать.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #32656862
raur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда тебе надо написать что-либо, что вызвало-бы нужные методы и поставить в автозагр. и vb.hide ...
а какая операционка у тебя о птичках?
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #32658538
MegaDimon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Система Windows2000, чтобы уомпонент не выгружался я сделал как ты говориш прогу которая постоянно на него ссылается. Идея была хорошая.

У меня такой вопрос, как можно сделать чтобы каждый клиент создавая объект компонента получал один и тотже экземпляр объекта. Т.е. нужно чтобы все клиенты работали с одним экземпляром класса, а не порождали новые.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #32658948
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegaDimon
У меня такой вопрос, как можно сделать чтобы каждый клиент создавая объект компонента получал один и тотже экземпляр объекта. Т.е. нужно чтобы все клиенты работали с одним экземпляром класса, а не порождали новые.

Singleton хотите сэмулировать ?
По простому не выйдет.
По сложному:
1 - на сервере создается 1 экземпляр какого-то класса
2 - клиенты получают к нему доступ ч-з фабрику классов, т.е. через методы, дающие доступ к этому экземпляру
Пример

Почитайте пример, обратите внимание на Bug, который там описан.
Добавлю, что Вы конечно должны очень аккуратно разрабатывать свой Shared класс. Т.е. помнить, что он именно Shared, поэтому никаких флагов, помнить про блокировку ресурсов, помнить, что клиенты могут "умереть" и т.п. Очень, очень аккуратно.

В заключение - почитайте про Instancing и Threading в ActiveX EXE. При разработке такого рода проектов эти параметры очень влияют.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #32659353
MegaDimon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey огромное спасибо за ответ и ссылку на пример!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Время жизни ActiveX EXE'шников
    #33242803
Serg841
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyДык он и не выгрузится... Это ж exe, а не dll
Word или Excel тоже ActiveX exe, пока им не сделаешь Application.Quit, они будут висеть в памяти и жрать ее большими ложками.
А вот как раз возникла проблема чтобы выгрузить приложение Excel.
Application.quit не помогает :(
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33243212
MegaDimonСистема Windows2000, чтобы уомпонент не выгружался я сделал как ты говориш прогу которая постоянно на него ссылается. Идея была хорошая.

У меня такой вопрос, как можно сделать чтобы каждый клиент создавая объект компонента получал один и тотже экземпляр объекта. Т.е. нужно чтобы все клиенты работали с одним экземпляром класса, а не порождали новые.

допустим - получилось. (ЕXE и т.д.)

аднака панятна ли, что пока один дернул такой класс за метод,
все остальные клиенты обязаны ждать. и не могут дотронутся до такого объекта.
то есть дотронутся могут, но либо ждать будут, либо отвалятся п о таймауту.
Понимаете ли Вы, что создаете общесистемное узкое горло?

(Видел таку бяку от пропессианальных прогряммиздов - м#%*чье таким
способом через один коннект к базе работало. Песня просто, картина Репина
-сервер базы прохлаждается, "компонент" трудится, юзера матерятся. )

Если понимаете - вперед за дело.

1) Создать ActiveX.Exe проект. поставить Thread Pool=1.
Startup Object=Sub Main

2) Завести PublicMultiUse класс, функциями которого будете
возвращать экземпляр класса ЛюбимыйИЕдинственныйНаВсех, который реализует интерфейс IЛюбимыйИЕдинственныйНаВсех
3) создаете PublicNotCreatable класс с именем IЛюбимыйИЕдинственныйНаВсех
4)Создаете MultiUse класс RЛюбимыйИЕдинственныйНаВсех
5) В стандартном модуле заводите (глобальную) переменную уровня модуля
типа IЛюбимыйИЕдинственныйНаВсех
В Sub Main формируете экземпляр RЛюбимыйИЕдинственныйНаВсех
и сохраняете в переменную модуля



То есть пальцев пять и все об асфальт.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33243353
RЛюбимыйИЕдинственныйНаВсех - он Private
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33243402
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
глупыйглупый
...


Ржунимагу... :-)))
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33243560
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА вот как раз возникла проблема чтобы выгрузить приложение Excel.
Application.quit не помогает :(
Бывает. С чем связано не знаю.
Нужно внимательно посмотреть, не осталось ли ссылок на само приложение или какие нибудь его объекты. Полезно так же закрыть все документы, после чего сделать Quit.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33243893
Serg841
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy авторА вот как раз возникла проблема чтобы выгрузить приложение Excel.
Application.quit не помогает :(
Бывает. С чем связано не знаю.
Нужно внимательно посмотреть, не осталось ли ссылок на само приложение или какие нибудь его объекты. Полезно так же закрыть все документы, после чего сделать Quit.
Если просто использую это приложение, то все закрывается и выгружается из памяти. Но когда я его используя для вставки данных в Access, то никак не хочет выгружать приложение Excel. Привожу фрагмент кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Dim xlApp As Object     
Dim xlWkb As Object     

smdbname = "D:\proba.mdb"
f_name = "Dan_009"

Set conn = CreateObject("ADODB.Connection")
conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & smdbname & ";User ID=Admin;Password=;Extended Properties=")

Set xlApp = GetObject("", "Excel.Application")
Set xlWkb = xlApp.workbooks.Open("D:\Dan_009.xls")

For i =  1  To xlWkb.sheets.Count
    If InStr(LCase(xlWkb.sheets(i).Name), LCase("prep")) <>  0  Then
        xlname = xlWkb.sheets(i).Name
    End If
Next i

On Error Resume Next
   conn.Execute "create table " & f_name & " (summa double, prep char (255), klass char(255)," & _
             "uid double, ne_l char(255), drug char(255), form char(255), id_divider double)"

SQL = "INSERT INTO " & f_name & " IN '" & smdbname & "' " & _
      "SELECT summa,prep,klass,uid,ne_l,drug,form,id_divider " & _
      "FROM [" & xlname & "$] IN 'D:\Dan_009.xls'[EXCEL 8.0;HDR=yes;IMEX=1];"
      conn.Execute SQL, , adExecuteNoRecords

xlApp.workbooks.Close
xlApp.quit
Set xlApp = Nothing
conn.Close
Set conn = Nothing
MsgBox "Данные скопированы!"
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33243991
переставь conn.Close
до
xlApp.workbooks.Close
xlApp.quit
Set xlApp = Nothing

скорее всего поможет.
а на вопрос "почему" - тебе уже Antonariy ответил.
в данном случае неявно.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33244277
Serg841
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
глупыйглупыйпереставь conn.Close
до
xlApp.workbooks.Close
xlApp.quit
Set xlApp = Nothing

скорее всего поможет.
а на вопрос "почему" - тебе уже Antonariy ответил.
в данном случае неявно.
Ничего не изменилось, приложение по-прежнему в памяти. Выгружается только после закрытия Visual Basic.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33244293
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если On Error Resume Next убрать, на что ругается?
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33244298
Serg841 глупыйглупыйпереставь conn.Close
до
xlApp.workbooks.Close
xlApp.quit
Set xlApp = Nothing

скорее всего поможет.
а на вопрос "почему" - тебе уже Antonariy ответил.
в данном случае неявно.
Ничего не изменилось, приложение по-прежнему в памяти. Выгружается только после закрытия Visual Basic.

(Set conn = Nothing - дотянул туда же?)

значит дело не в этом куске. Какие-то куски есть еще с поброшенными явными или неявными объектными ссылками.

шерсти код.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33244927
Serg841
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MelkiadesА если On Error Resume Next убрать, на что ругается?
Если таблица в аксесе уже существует, то выдает ошибку
On Error Resume Next позволяет ее избежать
глупыйглупый
(Set conn = Nothing - дотянул туда же?)

значит дело не в этом куске. Какие-то куски есть еще с поброшенными явными или неявными объектными ссылками.

шерсти код.
Set conn = Nothing тоже поставил, без изменений.
Весь код я выложил, больше никаких кусков нет.
Наверное при выполнении sql-запроса книга все равно остается в памяти.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33244946
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg841
Set conn = Nothing тоже поставил, без изменений.
Весь код я выложил, больше никаких кусков нет.
Наверное при выполнении sql-запроса книга все равно остается в памяти.
Такое ощущение, что Excel удерживает у себя ссылку на Access.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33245002
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyНужно внимательно посмотреть, не осталось ли ссылок на само приложение или какие нибудь его объекты.

Set xlWkb = xlApp.workbooks.Open("D:\Dan_009.xls")

Убить в nothing!
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33245253
Serg841
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy AntonariyНужно внимательно посмотреть, не осталось ли ссылок на само приложение или какие нибудь его объекты.

Set xlWkb = xlApp.workbooks.Open("D:\Dan_009.xls")

Убить в nothing!
Не помогло. Дело в том, что если не использовать Access, т.е. только Excel то
Код: plaintext
1.
2.
xlApp.application.quit
Set xlApp = Nothing
достаточно чтобы убить приложения.

Так что думаю дело не в других ссылках, а в Access, т.е. во взаимосвязи с ним Excel.
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33245313
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Access в памяти не висит?
...
Рейтинг: 0 / 0
Время жизни ActiveX EXE'шников
    #33245368
Serg841
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MelkiadesА Access в памяти не висит?
Нет.

Наконец-то удалось получить нужный резалт.
Если Excel убить до использования его в запросе, то все нормально. И запрос выполняется и Excel из памяти исчезает.

Спасибо всем кто помогал разбираться с проблемой!
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Время жизни ActiveX EXE'шников
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]