![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с сервисами - помогите.
koha © (2007-10-01 07:36:00)Создал свой сервис работает все пучком, сидит в трее имееет меню, но решил добавить форм немного (о программе, настройки).. Формы вызываются, но не закрываются виснут, не пойму вчем дело, подскажите вчем дело?
DVM (2007-10-04 11:04:00) [1]Кстати, тот же SQLServer.exe вообще не импортирует функцию CreateWindow(Ex) и в запущенном состоянии потребляет 0 объектов USER, что наводит на мысль о том, что вряд ли в его коде создается хоть одно окно вообще.
DVM (2007-10-04 11:02:00) [2]
> Leonid Troyanovsky © (04.10.07 09:09) [36]
> Окна в службах - нормальная вещь, многие сервисы являются
> GUI приложениями.
Согласен, если только это скрытые, служебные окна, например для обработки сообщений от таймеров, сокетов и т.д.
Но зачем создавать GUI приложение с окнами и запускать его как сервис, если никто этот GUI никогда не увидит? Не понимаю. Только, если изначально приложение не было сервисом, а потом его решили таковым сделать.
То что многие сервисы имеют GUI - это говорит лишь о том, что такое возможно, но не о том что так стоит делать. Концептуально неправильно.
Leonid Troyanovsky (2007-10-04 09:09:00) [3]
> DVM © (03.10.07 21:56) [31]
> окна в службах - это явно посторонняяя и чуждая назначению
> службы вещь.
Окна в службах - нормальная вещь, многие сервисы являются
GUI приложениями.
А вот взамодействие юзера с этими окнами - извращение,
как со стороны здравого смысла, так и со стороны msdn.
--
Regards, LVT.
Сергей М. (2007-10-04 08:22:00) [4]
> зачем же ему GUI, например, для MSSQL Server, запущенному,
> как служба?
Иконку в трей запуздыривает не MSSQL-сервис, а сервис-менеджер (sqlmanagr.exe) - обычное гуёвое приложение.
Anatoly Podgoretsky (2007-10-03 23:23:00) [5]> DVM (03.10.2007 23:16:33) [33]
У SQL тоже нет, все управление через внешние клиентские программы.
DVM (2007-10-03 23:16:00) [6]
> Или же для IBServer (тоже, как служба)?
И где у него окна?
Johnmen (2007-10-03 22:59:00) [7]
> DVM © (03.10.07 21:56) [31]
> Скажите честно, Вы сами будете так делать (окна в службах)?
Не только буду, но и был и есть. И никаких проблем не испытываю. А почему? А потому, что догматов не читал :)
> Просто здравый смысл говорит о том, что окна в службах -
> это явно посторонняяя и чуждая назначению службы вещь.
Наверное, Гейтс думает по-другому? Иначе, зачем же ему GUI, например, для MSSQL Server, запущенному, как служба? Отрезал бы, и все дела...
Или же для IBServer (тоже, как служба)?
DVM (2007-10-03 21:56:00) [8]
> Johnmen ©
Можно и на корову седло надеть и на скачках на ней выступать.
Скажите честно, Вы сами будете так делать (окна в службах)?
Вы, по-моему спорите только из-за того, что Вам не понравилось категоричное высказывание Сергея, но не более того. А Сергей ведь прав.
И здесь не нужно для доказательства приводить какие-то там выдержки из MSDN. Просто здравый смысл говорит о том, что окна в службах - это явно посторонняяя и чуждая назначению службы вещь.
Простой пример.
Есть некая служба, которая должна выводить некую информацию в некое окно и создавать иконку в области уведомлений для вывода этого окна.
Есть два варианта, первый окно выводит служба, второй - окно создается отдельной программой, запускаемой пользователем и эта же программа добавляет иконку.
Теперь, допустим, мы имеем несколько пользователей, одновременно вошедших в систему, например через сервер терминалов. Окна и иконки должны появиться у всех пользователей на их десктопах.
Что легче запрограммировать - окна в службе или отдельную программу взаимодействующую со службой для этого случая? Очевидно второе.
Leonid Troyanovsky (2007-10-03 17:53:00) [9]
> Johnmen © (03.10.07 17:39) [29]
> Здесь ничего не говорится, что службы НЕ ДОЛЖНЫ / НЕ МОГУТ
> иметь UI
Помиритесь на GUI, т.е., службы могут быть как GUI так и нет.
Ну, а интерактивное взаимодействие с десктопом юзера вполне,
IMHO, достойно категоричности, особенно в этой эхе.
--
Regards, LVT.
Johnmen (2007-10-03 17:39:00) [10]
> Сергей М. © (03.10.07 17:31) [28]
Здесь ничего не говорится, что службы НЕ ДОЛЖНЫ / НЕ МОГУТ иметь UI, как можно было понять по твоим категорическим высказываниям.
И я бы сказал не "не жупел", а "не догма".
Сергей М. (2007-10-03 17:31:00) [11]
> Johnmen © (03.10.07 17:24) [27]
Цитата из
http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/vbcon/html/vbconintroductiontontserviceapplications.asp
Знакомство со служебными приложениями Windows
Службы Microsoft Windows (ранее называвшиеся службами Windows NT) позволяют создавать исполняемые приложения, работающие продолжительное время и выполняющиеся в отдельной сессии Windows. Эти службы не содержат элементов пользовательского интерфейсаи могут быть автоматически запущены при загрузке компьютера, а также остановлены и запущены повторно. Это дает возможность использовать службы на сервере, а также на любом другом компьютере, где требуется обеспечить выполнение каких-либо задач так, чтобы не мешать пользователям, работающим на этом же компьютере. Кроме того, службы могут быть запущены не в контексте безопасности текущего пользователя Windows, а в контексте безопасности другого пользователя или учетной записи компьютера по умолчанию
Вопросы еще имеются ?)
Разумеется, это не жупел, но рекомендованное мелкомягкими концептуальное назначение служб)
Johnmen (2007-10-03 17:24:00) [12]
> Сергей М. © (03.10.07 08:18) [22]
> Организация UI - задача "обычных" приложений (в т.ч. апплетов, консольных).
В какой книге/на каком ресурсе про это написано?
Сергей М. (2007-10-03 14:11:00) [13]
> идея с трансформерами не понятна
Ничто не мешает выступать твоему приложению и в роли "двигателя" и в роли "прибора управления и контроля за работой двигателя".
Либо то либо другое, о чем соббсно ты и упомянул в [20] и против чего я собссно и не имею возражений.
Но вот когда один и тот жеэкземпляр твоего приложения, рожденный сервис-менеджером в ипостаси "двигателя", пытается при этом примерить на себя ипостась "приборной панели" (см. то самое "запуздыривание иконки") - вот это ненормально)
koha (2007-10-03 14:00:00) [14]
> Сергей М. © (03.10.07 13:52) [24]
- идея с двигателями понятна, но вот идея с трансформерами не понятна.
Сергей М. (2007-10-03 13:52:00) [15]
> koha © (03.10.07 13:42) [23]
Ты, кстати, автовладелец ?
Понимаешь ли, двигатель существует сам по себе.
Его задача - двигать твой драндулет.
А вот контроль за работой двигателя - это задача разработчиков бортовых приборов контроля и собственно водилы, но никак не двигателя)
Та к вот сервис - это тот самый двигатель, а внешнее приложение - это те самые бортовые приборы контроля.
koha (2007-10-03 13:42:00) [16]
> Сергей М. © (03.10.07 08:18) [22]
Идею передавать сообщения Application.Handle сервису я уже передалываю, согласен, что протупил. Но все же некоторые программы работают так, уже выше упоминал (koha © (02.10.07 20:11) [19]). Они - то, что отступили от принципов или извращенцы? Или это нестандартное применение как новое направление? Ведь в свою очеред нетипичным было применение скинов все старались держаться в стороне, но winamp сделал "революцию".
Может быть у меня не правильное понятие о сути работы этих программ?
Сергей М. (2007-10-03 08:18:00) [17]
> В моей утилите только один экземпляр создается, а два одинаковых
> сервиса не запустятся
Я не про это.
Я про то что одно и то же сервис-приложение, будучи стартованным, в ходе работы вполне может создавать более чем один сервис.
См. File -> New -> Other.. -> Service
> Johnmen © (02.10.07 22:32) [21]
> чем он является?
Организация UI - задача "обычных" приложений (в т.ч. апплетов, консольных).
А "запуздыривать иконки" можно конечно научить и драйвер)
> для других категоричных высказываний
Это каких ?)
Johnmen (2007-10-02 22:32:00) [18]
> Сергей М. © (01.10.07 14:40) [6]
> Еще раз - UI не является скол-либо оправданной задачей сервиса.
А чем он является?
И какие есть объективные причины для других категоричных высказываний в данной ветке?
koha (2007-10-02 21:08:00) [19]> Сергей М. ©
Я думаю, что мог бы, приблизительно, так развести запуск в одном exe-шнике.
program FlashAntiAutostart;
uses
SvcMgr,
Windows,
SysUtils,
SvcInfo,
Unit1 in 'Unit1.pas' {SvcAntiAutoRuns: TService},
Unit2 in 'Unit2.pas' {FrmAbout},
Unit3 in 'Unit3.pas' {FrmShowLog}
//............
{$R *.RES}
Var //...
begin
//..........................
if WinNT = true then begin //
// Function SvcStartServise() from SvcInfo.pas
if Function SvcStartServise('SvcAntiAutoRuns') then begin //если сервис уже запущен
Application.Initialize; //то запускаем как простое приложение
Application.CreateForm(TFrmAbout, FrmAbout);
Application.CreateForm(TFrmShowLog, FrmShowLog);
end
else begin
if not Application.DelayInitialize or Application.Installing then // это собственно для старта самого сервиса
Application.Initialize;
Application.CreateForm(TSvcAntiAutoRuns, SvcAntiAutoRuns);
end
end
else begin // это значит в режиме win9x
Application.Initialize;
Application.CreateForm(TFrmAbout, FrmAbout);
Application.CreateForm(TFrmShowLog, FrmShowLog);
end
Application.Run;
//............................
end.
- ??
koha (2007-10-02 20:11:00) [20]
> Сергей М. © (02.10.07 10:48) [18]
В моей утилите только один экземпляр создается, а два одинаковых сервиса не запустятся.
Мне интересно как в таком случае работают некоторые антивирусы например AVP.EXE он же является и сервисом и имеет окна и взаимодействует с пользователем и ряд других антивирусов подобным образом устроены. По сути я пытаюсь небольшую утилиту сделать которая будет удалять вредоносные программы. И хотел бы что бы она обладала такими способностями как проверка до входа юзера в систему и могла работать с интерфейсом пользователя и был один файл и работал как и на win9x так и NT платформе. Но похоже, что так не выйдет сервис сам по себе а интерфейс без входа пользователя существовать не межет, а сервис стартует раньше юзера. Вы правы на счет разделения их в корне интерфейс отдельно а сервис отдельно. Может ли это существовать все в одной программе? Но только запускаться будет по разному сперва как сервис, а когда юзер вошел как интерфейс другим процессом. Или все же делать лучше как советовали выше двумя разными модулями?
И еще вопрос как сервису узнать, что юзер вошел в свою учетную запись?