Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.008 c
2-1196692582
..::KraN::..
2007-12-03 17:36
2007.12.30
TImage на рабочий стол


15-1196457288
deras
2007-12-01 00:14
2007.12.30
Вопрос стоимости сопровождения собственного ПО


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


15-1196551729
KilkennyCat
2007-12-02 02:28
2007.12.30
А бомжи голосовать имеют право?


1-1192005213
9899100
2007-10-10 12:33
2007.12.30
Firebird





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский