Форум: "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