Как выгрузить библиотеку из памяти?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Как выгрузить библиотеку из памяти?

Сообщение arthur2 » 21.03.2008 (Пт) 11:37

Пишу ActiveX DLL, которая встраивается в эксплорер. Чтобы перекомпилировать библиотеку, приходится каждый раз перезапускать эксплорер. Есть ли менее громоздкий способ выгрузить библиотеку из памяти?

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 21.03.2008 (Пт) 11:57

DLL для MSIE?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.03.2008 (Пт) 12:09

arthur2
ActiveXDLL "выгружается", как только все её объекты умрут.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение alibek » 21.03.2008 (Пт) 12:21

Можешь создать пользователя и запускать Explorer под ним (и тестировать библиотеку). Будет чуть проще.
Lasciate ogni speranza, voi ch'entrate.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 21.03.2008 (Пт) 13:06

jangle
Нет, для проводника. Собственно, я всё про то же: http://bbs.vbstreets.ru/viewtopic.php?t ... 9ad8650431
Контекстное меню на файле. После того, как один раз его откроешь, библиотека становится недоступна для записи и её невозможно перекомпилировать. Приходится перезапускать проводник.

Хакер Возможно, я не правильно формулирую - не специалист. У меня не абтрактная теоретическая, а вполне конкретная проблемма: файл библиотеки становится недоступен для записи.
Впрочем, ты как всегда, просто мимо пробегаешь и до ответа какому-то делитанту всё равно не снизойдёшь.

alibek Тестировать в режиме отладки вообще не получается: происходит только Class_Initialize и затем сразу же, минуя все остальные процедуры, Class_Terminate. Хотя скомпилированная библиотека работает нормально
Последний раз редактировалось arthur2 21.03.2008 (Пт) 17:05, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.03.2008 (Пт) 13:16

arthur2
Ты правильно формулируешь свою проблему. Ты спрашивал, есть ли способ, я тебе ответил.
Впрочем, ты как всегда, просто мимо пробегаешь и до ответа какому-то делитанту всё равно не снизойдёшь.

Фу. Теперь до ответа тебе я точно не снизойду.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 21.03.2008 (Пт) 17:44

Хакер
Да ладно ты - нашёл на кого обижаться. Ты несомненно очень хороший специалист (без иронии), но, как многие специалисты, исповедуешь принцип "каждый до всего должен дойти сам". Снобоват, в общем (я тоже - чего греха таить - в своей области снобоват). 8)

"Помощь" в виде тычка в нужном направлении, чтобы сам выкарабкивался, очень подходит амбициозным новичкам, которые тоже хотят стать специалистами или другим спецам, которые всплеснут руками - как же я сам не догадался.

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

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Сообщение Александр Дмитриев » 30.03.2008 (Вс) 13:59

Какой ОС ты пользуешься?

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 30.03.2008 (Вс) 20:42

Александр Дмитриев
банальная ХР

На сколько я могу догадываться, библа в памяти уже ни чего не делает, а система держит её по какому-то недоразумению.

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

Файл легко разблокируется програмкой Унлокер... Но библа после этого повторно работать не начинает, пока, опять же, не перезапустишь проводник.

В общем, кажется, задача переформулировалась в "как автоматизировать перезапуск не моей программы" (в данном случае проводника)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.03.2008 (Вс) 20:45

На сколько я могу догадываться, библа в памяти уже ни чего не делает, а система держит её по какому-то недоразумению.

Глупость. Откуда системе знать, не понадобится ли библа в дальнейшем зачем-нибудь?

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

Ну сделай батник или кмд-шку.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Сообщение Александр Дмитриев » 30.03.2008 (Вс) 21:16

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\Current Version\Explorer создаёшь параметр типа DWORD с названием DesktopProcess и присваиваешь ему значение 1. После перезагрузки для каждого окна Explorer'а будет создаваться свой процесс, и, соответственно, при его закрытии этот процесс будет завершаться вместе со всеми DLL'ками.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 30.03.2008 (Вс) 23:37

Александр Дмитриев
Какие преимущества по твоему мы получил от того, что установим этот параметр?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Сообщение Александр Дмитриев » 31.03.2008 (Пн) 1:21

Выгружение библиотеки из памяти будет выполняться менее громоздким способом: вместо перезапуска Explorer нужно будет только закрыть окно проводника.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.03.2008 (Пн) 1:22

Александр Дмитриев
А десктоп по твоему будет в контексте какого процессса?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Сообщение Александр Дмитриев » 31.03.2008 (Пн) 1:50

В контексте одного из процессов explorer.exe. Вообще, конечно, я согласен: если делать так, как я предлагаю, то не получится отлаживать прогу на рабочем столе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.03.2008 (Пн) 1:52

Если делать так, как ты предлагаешь, всё равно придётся убивать все процессы explorer.exe, потому как хотя бы одного из них будет достаточно, чтобы файл библиотеки был занят.

За исключнием разве что того случая, что десктопный процесс не использует библу вобще.

В любом случае, когда всё представлено одним процессом, мне кажется, когда лучше, потому как проще убить один процесс, чем закрывать подряд кучу окон.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Сообщение Александр Дмитриев » 31.03.2008 (Пн) 2:07

Насколько я знаю, библиотека подгружается при первой необходимости к ней, и пока не щелкнул правой кнопкой мыши на рабочем столе, она не подгрузится к процессу, в контексте которого находится десктоп:
arthur2 писал(а):Контекстное меню на файле. После того, как один раз его откроешь, библиотека становится недоступна для записи и её невозможно перекомпилировать.

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

Сообщение ANDLL » 31.03.2008 (Пн) 10:55

Угу, достаточно не щелкать правой кнопкой по рабочему столу, и все будет ок.
Идея куда лучше чем ранее озвученные
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

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

Сообщение ANDLL » 31.03.2008 (Пн) 10:55

Перед отправкой этого сообщения был connection timeout у smtp :)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 01.04.2008 (Вт) 10:10

Хакер

Откуда системе знать, не понадобится ли библа в дальнейшем зачем-нибудь?

Ну, этого я не знаю. Но соседний проект - ровно так же библа встраивается в шел, только не для контекстного меню, а для тултипов файла. Подсказка всплывает, всё что надо, в ней выводится, но библа в памяти не остаётся и спокойно перезаписывается.
Ну сделай батник или кмд-шку

А можно чуть подробнее? Я так и хотел, но не знаю, как это осуществить:
1. Выгружаю проводник
2. Запускаю проект на компиляцию
3. Запускаю проводник
Второй и третий пункт понятны, а как сделать первый?

Александр Дмитриев Й-й-е-ес! Заработало! Спасибо!
Последний раз редактировалось arthur2 01.04.2008 (Вт) 12:32, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 01.04.2008 (Вт) 10:12

Есть taskkill. Консольная утилита такая.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 01.04.2008 (Вт) 12:31

Хакер
Спасибо! нашёл:
taskkill /f /im explorer.exe


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

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

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

    TopList