Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Удаление плагина перед убийством EXE
DymДата: Суббота, 12 Декабря 2009, 06:57 | Сообщение # 1
Поэт
Группа: Проверенные
Сообщений: 220
Репутация: 9
Награды: 7
Статус: Offline
Любой файл удаляется, а плагин не хочет. Помогите, друзья!

Code
P$='WAIT,HIDE /c del "<Embedded>\Plugin.dll" /Q'
Run("cmd","P$")
Run("taskkill.exe","HIDE,WAIT /F /IM моя_прога.exe")

P.S. Очистить надо не всю папку, а только избранные файлы (в том числе и плагины).


Вы не поверите, но я опять в строю – одним лишь взглядом свои мысли подаю!

"Записи Дыма" <> "Лирика Дыма" <> "Помощник дурака"
© Dym
 
SowerДата: Суббота, 12 Декабря 2009, 09:48 | Сообщение # 2
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
Если плагины используются твоей программой, то их нужно выгрузить из памяти! больше, на сколько я знаю, никак их не удалить. Тут должно быть два способа (минимум):
1) Функция выгрузки из памяти внутри плагина
2) Посторонними утилитами
.................................................

Добавлено (12 Декабрь 2009, 09:48)
---------------------------------------------

Quote (Sower)
выгрузить из памяти! больше, на сколько я знаю, никак их не удалить

Хотя видел в делфиворлд статью как удалить ехе запущенной программы...
 
Alex3AДата: Суббота, 12 Декабря 2009, 14:01 | Сообщение # 3
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Ембедед плагин сам удаляется при нормальном закрытии проги, удалить то что занято
другой прогой не даст система, так же и убить плагин если его запустила твоя прога.
Так что надо знать что и от куда ты удаляеш, если свое из той проги что выложила в
ембедед, то при закрытии она сама уберет из эмбедед все что туда ложила, то что туда же положил ты можно удалить. В ембеде могут оставаться файлы при некорректном завершении проги, плагин то же может остатся,если его работа не правильно завершена.
И если речь идет просто о том что бы при нормальном завершении проги в ембеде ничего не оставалось, то надо просто обеспечить корректное ее завершение в обработчике
завершения проги - CBK_EXIT, прервать работу выполняемой плагином.
 
DymДата: Суббота, 12 Декабря 2009, 19:12 | Сообщение # 4
Поэт
Группа: Проверенные
Сообщений: 220
Репутация: 9
Награды: 7
Статус: Offline
Quote (Sower)
то их нужно выгрузить из памяти

Вот-вот, именно это я и имел ввиду – выгрузить плагин из памяти перед убийством процесса.
Мое стремление: максимально удалить вложенные (<Embedded>) файлы именно после убийства exe. 30 файлов в CBK_EXIT удаляю одним циклом:
Code
If (taskkill=1) Then
   For d=1 To 30
     D$='WAIT,HIDE /c del "<Embedded>\\'+CHAR(d)+'.dym" /Q'
     Run("cmd","D$")
   Next d
   Run("taskkill.exe","HIDE,WAIT /F /IM dym.exe")
End
Exit()

Quote (Alex3A)
то при закрытии она сама уберет из эмбедед все что туда ложила

В самом деле? :D

Значит, останутся всего два плагина и файлы с сохраненными настройками. Сенк за отзывы!


Вы не поверите, но я опять в строю – одним лишь взглядом свои мысли подаю!

"Записи Дыма" <> "Лирика Дыма" <> "Помощник дурака"
© Dym
 
DEMBELДата: Суббота, 12 Декабря 2009, 19:33 | Сообщение # 5
Наш дизайнер
Группа: Модераторы
Сообщений: 2266
Репутация: 135
Награды: 32
Статус: Offline
Quote (Dym)
В самом деле?

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




Win7x64 SP1 Neobook v5.70 (Trial)
WinXP SP3 Neobook v5.62
 
DymДата: Суббота, 12 Декабря 2009, 19:45 | Сообщение # 6
Поэт
Группа: Проверенные
Сообщений: 220
Репутация: 9
Награды: 7
Статус: Offline
Quote (DEMBEL)
а что, не замечал разве? но это только при нормальном закрытии, при убийстве может и останутся...

Да ирония это! Я знаю чуть больше, чем кажется...


Вы не поверите, но я опять в строю – одним лишь взглядом свои мысли подаю!

"Записи Дыма" <> "Лирика Дыма" <> "Помощник дурака"
© Dym
 
Alex3AДата: Суббота, 12 Декабря 2009, 21:03 | Сообщение # 7
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Quote (Dym)
Значит, останутся всего два плагина и файлы с сохраненными настройками. Сенк за отзывы!

Все что в ембедед убирается, в том числе и плагины, если плагин остался, значит система не дала его убить при закрытии проги. Плагины бывают разные, есть такие что в процессе своей работы открывают паралельные потоки (нити), если приложение убить
в момент работы такого потока, плагин остается по той причине что он в этот момент не управляем. Что бы все было нормально, плагину следует завершить свою работу.
Тут просто тебе надо конкретно объяснить ситуацию, какие плагины у тебя остаются, и при каких условиях. Удаляются ли плагины в ручную, если нет, посмотри не висит ли чего в процессах. Обычно в плагине есть событие активирующееся при закрытии приложения
которое его использует, по этому событию плагин должен подготовить себя к закрытию.
Если такое в плагине не предусмотрено и он пользует паралельные потоки, или как раз
находится в недоступном режиме, то он остается.
 
PeterДата: Суббота, 12 Декабря 2009, 21:23 | Сообщение # 8
Админ NeoBook
Группа: Админ NeoBook
Сообщений: 1265
Репутация: 75
Награды: 18
Статус: Offline


Никто не может вернуться в прошлое и изменить свой старт.
Но каждый может стартовать сейчас и изменить свой финиш!
 
DymДата: Воскресенье, 13 Декабря 2009, 08:43 | Сообщение # 9
Поэт
Группа: Проверенные
Сообщений: 220
Репутация: 9
Награды: 7
Статус: Offline
Ты не поверишь! Но у меня получилось! Не знаю, ко всем ли плагинам подойдет? Проверяем у себя…
Прикрепления: delplugin.zip (2.5 Kb)


Вы не поверите, но я опять в строю – одним лишь взглядом свои мысли подаю!

"Записи Дыма" <> "Лирика Дыма" <> "Помощник дурака"
© Dym


Сообщение отредактировал Dym - Воскресенье, 13 Декабря 2009, 19:36
 
toizyДата: Воскресенье, 13 Декабря 2009, 16:23 | Сообщение # 10
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Из нормальных, не-извращенческих вариантов могу предложить аналог, описанный здесь. Тут показано, как программе удалить саму себя при помощи запуска пакетного сценария, который ждёт завершения запустившей его проги, после чего удаляет. Попробуй, понравится ))

Жизнь оказалась не такой уж и забавной, как поначалу...
 
SowerДата: Воскресенье, 13 Декабря 2009, 16:28 | Сообщение # 11
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
Quote (Dym)
Ты не поверишь! Но у меня получилось! Не знаю, ко всем ли плагинам подойдет? Проверяем у себя…

Действительно работает! Хорошая работа, сам бы не додумался, если честно :( Только в CBK_Exit надобыло после RunScript(...) написать exit, а то прога не закрывается :) приходиться в диспетчер лезть.

И всегота надобыло удалить объект в самом ммб scared thumbs_up

Добавлено (13 Декабрь 2009, 16:28)
---------------------------------------------

Quote (toizy)
Из нормальных, не-извращенческих вариантов могу предложить аналог, описанный здесь. Тут показано, как программе удалить саму себя при помощи запуска пакетного сценария, который ждёт завершения запустившей его проги, после чего удаляет. Попробуй, понравится ))

Здесь нужно удалить именно плагин во вермя работы приложения ;)
 
DymДата: Воскресенье, 13 Декабря 2009, 19:38 | Сообщение # 12
Поэт
Группа: Проверенные
Сообщений: 220
Репутация: 9
Награды: 7
Статус: Offline
Quote (Alex3A)
№7

Очень познавательная инфа! thumbs_up

Quote (Peter)
А в чем тогда проблема?
"Format C:\" и все счастливы!

Недавно так и сделал! (почти так) :D

Quote (Sower)
надобыло после RunScript(...) написать exit

Перезалил в 9 посте (но закрываться должно и так).

Quote (toizy)
Из нормальных, не-извращенческих вариантов могу предложить аналог, Попробуй, понравится ))

Долго вникал я в этот пример, аж испугался. :D Это надо хорошо обдумать на досуге, а то удалю еще комп. :D Интереснейший способ, надо заметить. thumbs_up


Вы не поверите, но я опять в строю – одним лишь взглядом свои мысли подаю!

"Записи Дыма" <> "Лирика Дыма" <> "Помощник дурака"
© Dym
 
Alex3AДата: Воскресенье, 13 Декабря 2009, 21:07 | Сообщение # 13
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Quote (toizy)
Из нормальных, не-извращенческих вариантов могу предложить аналог, описанный здесь.

Применение эксклюзивных решений, в первую очередь, говорит о том что что то в функционировании проги, недодумано програмером, вот он и пытаеся свои недоработки
компенсировать такими решениями.
Dym, как я понял из вышеописанного, ты применил функцию DeleteObject("").
И определил что она способна удалять все объекты, а не только созданные динамически.
На месте чансов, я бы сделал более универсальную функцию - CreateObject(""),
заменив ею все Create*** функции, тогда бы можно было бы сделать загрузку плагинов
динамически. И все же, повторюсь, если при закрытии проги остаются заембеденные
файлы, Это не есть здраво, и прежде всего надо боротся с причиной, а не следствием.
А извращенные примеры типа сценариев по расписанию, должны использоватся как исключения, а не как правила.
 
DymДата: Понедельник, 14 Декабря 2009, 17:34 | Сообщение # 14
Поэт
Группа: Проверенные
Сообщений: 220
Репутация: 9
Награды: 7
Статус: Offline
Постараюсь объяснить для чего все это…
В программе используется несколько вложенных mbd-файлов, вызываемых командой
Code
RunMBD("<Embedded>\10.dym","NEW_WINDOW,Page 2")

Каждый из которых использует тот же SmallPlugin, что и главное окно (а оно использует еще один плагин).
И есть на выбор: 1) закрывать все окна разом; 2) каждое отдельно.
Если второе – тогда нет проблем. После закрытия каждого окна вложенные в него файлы исчезают одновременно с закрытием. А вот если первое – тогда выполняется команда:
Code
Run("taskkill.exe","HIDE,WAIT /F /IM моя_прога.exe")
Перед убийством процесса, все вложенные файлы удаляем одним циклом
Code
  For d=1 To 30
     D$='WAIT,HIDE /c del "<Embedded>\\'+CHAR(d)+'.dym" /Q'
     Run("cmd","D$")
   Next d
А плагины…
В этом и есть собственно загвоздка.



Вы не поверите, но я опять в строю – одним лишь взглядом свои мысли подаю!

"Записи Дыма" <> "Лирика Дыма" <> "Помощник дурака"
© Dym
 
Alex3AДата: Понедельник, 14 Декабря 2009, 18:35 | Сообщение # 15
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
Тут есть один выход, ембедь в каждый вложенный проект SmallPlugin с разным именем,
просто переименуй дллку, тогда каждая будет определяться как отдельная, и каждый
проект будет удалять свою копию.
 
DymДата: Вторник, 15 Декабря 2009, 18:51 | Сообщение # 16
Поэт
Группа: Проверенные
Сообщений: 220
Репутация: 9
Награды: 7
Статус: Offline

Благодаря совету авторитетного магистра ММВ (и не только) мой вопрос решен наилучшим для меня способом. Для всех заинтересованных специально сделаю пример и скоро представлю.

Прикрепления: 5595150.png (3.5 Kb)


Вы не поверите, но я опять в строю – одним лишь взглядом свои мысли подаю!

"Записи Дыма" <> "Лирика Дыма" <> "Помощник дурака"
© Dym


Сообщение отредактировал Dym - Вторник, 15 Декабря 2009, 18:57
 
DymДата: Среда, 16 Декабря 2009, 02:07 | Сообщение # 17
Поэт
Группа: Проверенные
Сообщений: 220
Репутация: 9
Награды: 7
Статус: Offline
Благодарности автору smallplugin!

Перезалил, а то была одна ошибочка. Теперь все отлично!

Прикрепления: closeall.zip (14.5 Kb)


Вы не поверите, но я опять в строю – одним лишь взглядом свои мысли подаю!

"Записи Дыма" <> "Лирика Дыма" <> "Помощник дурака"
© Dym


Сообщение отредактировал Dym - Четверг, 17 Декабря 2009, 16:47
 
  • Страница 1 из 1
  • 1
Поиск: