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

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

Как убрать сообщение? [D6, WinXP]


Страницы:   1 2

cvv ©   (2007-06-09 11:45:00) 

Здравствуйте. Вопрос: я написал службу, котрая запускается, выполняет нужные действия и останавливается, чтобы не висеть в холостую и не жрать ресурсы. При остановке службы система выдает сообщение типа: "Служба была запущена и затем остановлена...". Как сделать так, чтобы это сообщение не выдавалось?
Спасибо.


clickmaker   (2007-06-13 09:56:00) [1]


> вставить в стандартные виндовские "Назначенные задания"
> с запуском  "При загрузке компьютера".

кроме этого, есть еще логон-скрипты. Как для всей машины, так и для отдельно взятого юзера


artdeveloper   (2007-06-10 20:56:00) [2]


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

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


clickmaker   (2007-06-09 17:23:00) [3]


> никто вроде бы ему не шлет сообщения с запросом статуса

ну его могут захотеть принудительно остановить... Но это актуально, если он долго работает...

кстати, чтобы не было сообщения типа: "Служба была запущена и затем остановлена...".  можно еще просто фиктивную задержку вставить длительностью WaitHint, если уж очень быстро по хозяйству управился


Сергей М.   (2007-06-09 16:18:00) [4]


> clickmaker ©   (09.06.07 16:12) [20]


> что-то не правильно?


А какие сообщения в этот момент (пока работает доп.поток, стартованый потоком сервиса) SCM может послать сервису ?

Сервис же стартовав ответил - "я стартовал". SCM это принял к сведению и успокоился. Всё. Никого более состояние сервиса пока не интересует, никто вроде бы ему не шлет сообщения с запросом статуса.

Что-то не правильно ?


clickmaker   (2007-06-09 16:12:00) [5]


> [17] Сергей М. ©   (09.06.07 16:04)

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


Сергей М.   (2007-06-09 16:08:00) [6]


> cvv   (09.06.07 16:05) [18]


Пуля себе в башку - дело вряд ли богоугодное)


cvv   (2007-06-09 16:05:00) [7]

Все. Сообщение больше не выдается. спасибо всем кто откликнулся, отдельное спасибо Eraser за идею.


Сергей М.   (2007-06-09 16:04:00) [8]


> clickmaker ©   (09.06.07 16:02) [16]


Идею не понял...
Ткни носом в суть ?


clickmaker   (2007-06-09 16:02:00) [9]


> [15] Сергей М. ©   (09.06.07 15:30)

ну идея-то понятна... )

AThread := TWorkerThread.Create(false);
while not Terminated do begin

 ServiceThread.ProcessRequests(False);
 Sleep(100);
 GetExitCodeThread(AThread.Handle, dwExitCode);
 if (dwExitCode <> STILL_ACTIVE) then
   ServiceThread.Terminate;
end;
AThread.Free;


Сергей М.   (2007-06-09 15:30:00) [10]


> clickmaker ©   (09.06.07 15:14) [14]


> ServiceThread.ProcessRequests( True);


Сервис заснет "мертвым сном".


clickmaker   (2007-06-09 15:14:00) [11]

а так?

procedure TService1.Service1Execute(Sender: TService);
begin
   // Здесь запускаем поток, который что-то делает
   AThread := TWorkerThread.Create;
   
   while not Terminated do begin

     ServiceThread.ProcessRequests(True);
     GetExitCodeThread(AThread.Handle, dwExitCode);
     if (dwExitCode <> STILL_ACTIVE) then
       Terminated := true;
   end;
end;


Сергей М.   (2007-06-09 14:59:00) [12]


> предполагаю, что это оболочка для "ControlService + SERVICE_CONTROL_STOP",
>  хотя могу ошибаться


Ошибаешься.


cvv   (2007-06-09 14:22:00) [13]


> как вариант, попробуй вручную останавливать сервис (ControlService
> + SERVICE_CONTROL_STOP).

так вот я и экспериментирую, пробую останавливать сервис с помощью DoStop, внутрь DoStop'а не смотрел, но предполагаю, что это оболочка для "ControlService + SERVICE_CONTROL_STOP", хотя могу ошибаться. Надо попробовать.
Можно, конечно, не останавливать сервис, хрен с ним, пусть висит, но все же...


Eraser   (2007-06-09 14:11:00) [14]

> [10] cvv   (09.06.07 13:53)

как вариант, попробуй вручную останавливать сервис (ControlService + SERVICE_CONTROL_STOP).


cvv   (2007-06-09 13:53:00) [15]

Причем здесь код? Вот полностью смоделированная ситуация:

procedure TService1.ServiceExecute(Sender: TService);
var
 i: integer;
begin
 i := 0;
end;

Все. Никакого другого кода нет. Пусть у нас есть сервис, кот-й только и делает то, что присваивает переменной i значение 0.
Если его установить и запустить, то Винда выдаст сообщение:"Служба была запущена и затем остановлена...". И это правильно. Но, это сообщение мешает!
Как это сообщение убрать я не знаю.


Сергей М.   (2007-06-09 13:42:00) [16]

Все-таки покажи код ...


cvv   (2007-06-09 13:40:00) [17]

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

Если обработчик OnExecute завершает работу, то это сообщение выдается. У тебя нет? Если не выдается, подскажи где подкрутить? Как его убрать?


Сергей М.   (2007-06-09 13:29:00) [18]


> Останавливаю с помощью DoStop


Э-э-э .. Подожди) ..

Какой нафих еще DoStop, если служба автоматически останавливается по завершению обработчика OnExecute, безо всяких там изощренных телодвижений с DoStop'ами ?

Ведь метод DoStop вызывается при получении сервисом от сервис-менеджера контрола SERVICE_CONTROL_STOP, а сервис-менеджер тебе ничего не посылал !

??


Сергей М.   (2007-06-09 13:24:00) [19]

То бишь у тебя это выглядит так:

1. Обработчик OnStart возвращает Started = True

2. Обработчик OnExecute что-то там делает некое время "по хозяйству" и корректно завершает выполнение после выполненной "хозработы".

Я правильно понял ?


cvv   (2007-06-09 13:18:00) [20]

за ссылку - спасибо.

Разве возникновение этого сообщение зависит от того, что делает служба? Уверен, что нет. Оно возникает при остановке службы. Старт - stAuto. Останавливаю с помощью DoStop. Служба останавливается, с выдачей этого сообщения(если не останавливать, то служба исправно "работает" без всякий сообщений). Может есть другие методы останова служб?


Страницы:   1 2

Наверх

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