Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Завершение некоторых процессов с одинаковым именем [D7, Win2k, WinXP]


Vladix ©   (2007-02-01 16:32:00) 

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


Чапаев   (2007-02-02 09:18:00) [1]

GetWindowThreadProcessId(Handle,Tr00Excel);
WinExec(Format('taskkill /f /im excel.exe /fi "PID ne %d",[Tr00Excel])


Хотя вообще-то [3] и [1].


Сергей М.   (2007-02-02 09:07:00) [2]


> когда от Вас мало чего зависит


Да что Вы говорите ?!

А исходники FastReporta для кого даны ?


Vladix   (2007-02-01 17:43:00) [3]

Игорь, спасибо!
По крайней мере, вы посмотрели на проблему моими глазами, без каких-то наездов на мой непрофессионализм. Над предложенными Вами вариантами я уже думал, видимо придется искать золотую середину между автоматической зачисткой процессов и предоставлении свободы действий пользователю.


Игорь Шевченко   (2007-02-01 17:30:00) [4]

Vladix ©   (01.02.07 17:19) [5]

Может, задать вопрос FastReport'у ? Они наверное лучше в этом разберутся.
Или попросить пользователя убирать за собой мусор через TaskManager.

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


Elen   (2007-02-01 17:27:00) [5]


>  так вот, если выполняется долгий запрос

юююпользователь должен видеть ход его выполнения, хотя бы песочные часы.

>  умный пользователь просто завершает программу любым известным
> ему способом

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


Vladix   (2007-02-01 17:19:00) [6]

Ладно, углубимся в подробности.
Наша организация пользует FastReport. В этом генераторе отчетов есть возможность вывода отчета в прописанный экселевский шаблон, причем FR берет на себя вся работу по связи с БД, выполнению запроса и выводу отчета. От программера требуется вызвать метод типа "Выполнить" этого объекта, а FR все остальное делает сам, в том числе и запуск Excel (скрытый, в отдельном процессе), так вот, если выполняется долгий запрос, умный пользователь просто завершает программу любым известным ему способом. А EXCEL.EXE продолжает висеть, удерживая файл шаблона.
Такая ситуация.


Elen   (2007-02-01 17:10:00) [7]


> если это напрягает юзера, он завершает программу,

А ты не скрывай процесс. Пусть юзер видит на экране что что-то движется, как это в Commandere сделано. Юзера не должно ничего напрягать, а если твой процесс может выпасть в состояние "не отвечает", то это уж ты виноват, а не юзер.


Игорь Шевченко   (2007-02-01 17:09:00) [8]


> он завершает программу, но этот Excel в памяти продолжает
> висет


а по завершении программы Excel.Quit сказать ? Вроде вполне кошерно


Vladix   (2007-02-01 17:00:00) [9]

Хороший не ответ...

Может быть Вы, как хороший программист в силах хотя бы предположить, что такая ситуация могла бы произойти с Вами? Если у Вас нет фантазии смоделировать подобную ситуация, когда от Вас мало чего зависит, могу Вам помочь.
Но может лучше не тратить времени на дискуссии, не касающиеся вопроса?
Такое имеет место, собственными силами этот вопрос решить я оказался не в силах, проблема озвучена...
Буду рад услышать любое предложение по теме вопроса


Сергей М.   (2007-02-01 16:39:00) [10]


> если это напрягает юзера


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо