Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.30;
Скачать: CL | DM;

Вниз

Как убрать сообщение?   Найти похожие ветки 

 
cvv   (2007-06-09 11:45) [0]

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


 
clickmaker ©   (2007-06-09 11:49) [1]


> выполняет нужные действия и останавливается

а почему именно как служба?


 
Сергей М. ©   (2007-06-09 12:19) [2]

И кого же "обслуживает" эта скромная в аппетитах служба ?


 
cvv   (2007-06-09 12:30) [3]

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

процессорное время по идее не расходует, а память занимает. Да и порядок хочу соблюсти.

По существу вопроса какие предложения/ссылки будут? К запуску и работе службы претензий нет. Как убрать сообщение или хотя бы записывать его в журнал событий, а не выводить на экран.


 
Сергей М. ©   (2007-06-09 12:35) [4]


> если есть другие варианты - подскажите


http://rsdn.ru/article/baseserv/extgina.xml


> По существу вопроса какие предложения/ссылки будут?


Покажи во фрагментах кода, что творит твоя служба - как стартует, как "останавливает" саму себя ..


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

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

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


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

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

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

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

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


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


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


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

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

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

??


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

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

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


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

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


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

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

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

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


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

> [10] cvv   (09.06.07 13:53)

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


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


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

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


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


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


Ошибаешься.


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

а так?

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 15:30) [15]


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


> ServiceThread.ProcessRequests(True);


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


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


> [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 16:04) [17]


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


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


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

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


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


> cvv   (09.06.07 16:05) [18]


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


 
clickmaker ©   (2007-06-09 16:12) [20]


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

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


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


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


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


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

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

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


 
clickmaker ©   (2007-06-09 17:23) [22]


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

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

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


 
artdeveloper ©   (2007-06-10 20:56) [23]


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

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


 
clickmaker ©   (2007-06-13 09:56) [24]


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.12.30;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.017 c
9-1163886978
Vga
2006-11-19 00:56
2007.12.30
Паки в играх


15-1196174838
All More system
2007-11-27 17:47
2007.12.30
Автопоиск в висте работает в фоновом режиме


2-1197010103
Руслан56
2007-12-07 09:48
2007.12.30
runtime error 200 at XXXX:XXXX


5-1164714160
Hollander
2006-11-28 14:42
2007.12.30
Проблема с SelAttributes


8-1171988250
ndg
2007-02-20 19:17
2007.12.30
изменить яркость, контраст и цветность