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

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

Работа с сервисами - помогите.


Страницы:   1 2

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 платформе. Но похоже, что так не выйдет сервис сам по себе а интерфейс без входа пользователя существовать не межет, а сервис стартует раньше юзера. Вы правы на счет разделения их в корне интерфейс отдельно а сервис отдельно. Может ли это существовать все в одной программе? Но только запускаться будет по разному сперва как сервис, а когда юзер вошел как интерфейс другим процессом. Или все же делать лучше как советовали выше двумя разными модулями?

И еще вопрос как сервису узнать, что юзер вошел в свою учетную запись?


Страницы:   1 2

Наверх

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