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

Вниз

Работа с сервисами - помогите.   Найти похожие ветки 

 
koha ©   (2007-10-01 07:36) [0]

Создал свой сервис работает все пучком, сидит в трее имееет меню, но решил добавить форм немного (о программе, настройки).. Формы вызываются, но не закрываются виснут, не пойму вчем дело, подскажите вчем дело?


 
Turbouser ©   (2007-10-01 07:44) [1]

Сервис с формами? Нельзя так делать. Не культурно.


 
Сергей М. ©   (2007-10-01 09:08) [2]


> Формы вызываются, но не закрываются виснут, не пойму вчем
> дело


Работа с формами в доп.потоках недопустима.


 
koha ©   (2007-10-01 10:07) [3]

А как правильно сделать?
- Но форма нужна, в принципе, я придумал такой метод: у формы OnClose на Form.hide, то форма не зависает а просто исчезает из вида так можно?
- Форма в принципе ничего не делает, только инфу показывает.


 
Сергей М. ©   (2007-10-01 10:13) [4]


> как правильно сделать?


Работать с формой в основном потоке.


> форма нужна, в принципе


> ничего не делает, только инфу показывает


Убирай форму из приложения-сервиса пока не поздно.

Если нужно "показывать инфу" и интерактивно управлять работой сервиса, реализуй приложение-апплет панели управления, в нем и работай с формами.


 
koha ©   (2007-10-01 14:33) [5]


> Сергей М. ©   (01.10.07 10:13) [4]


- К стати, а иконку в трее и менню можно?


 
Сергей М. ©   (2007-10-01 14:40) [6]

Можно, но не нужно, точно так же как и форму.

Еще раз - UI не является скол-либо оправданной задачей сервиса. Для реализации UI существуют обычные приложения и приложения-апплеты.


 
koha ©   (2007-10-01 17:20) [7]

Еще вопросик. Вот в сервисе у меня запускается еще один поток, собственно сервис управляет этим потоком дочерний поток при определенных условиях отправляет сообщения сервису через sendmessage(), а тот их обрабатывает своим обработчиком
type
 TSvcAntiAutoRuns = class(TService)
   //........
   procedure ThreadMessage(var Msg:TMessage);message WM_USER+1;
  //.........


Но если определенные события возникнут при загрузке системы до входа юзера в уч. запись будут ли эти сообщения обрабатываться?


 
Сергей М. ©   (2007-10-01 17:30) [8]


> дочерний поток при определенных условиях отправляет сообщения
> сервису через sendmessage()


Какое окно фигурирует в ка-ве получателя сообщения ?


 
Сергей М. ©   (2007-10-01 17:33) [9]


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


Сервис и так уже исполняется в собственном доп.потоке.
Чем вызвана необходимость создавать еще один доп.поток ?


 
Sairex ©   (2007-10-01 17:48) [10]

Ребят а если не трудно то и на мой вопросик ответьте плииз:
Не моглибы вы скинуть пример (рабочий) сервиса, а то сколько не бился не получалось.


 
Сергей М. ©   (2007-10-01 17:50) [11]


> не получалось


Что конкретно не получалось ?


 
koha ©   (2007-10-01 17:59) [12]


> Сергей М. ©   (01.10.07 17:30) [8]
> > дочерний поток при определенных условиях отправляет сообщения
> > сервису через sendmessage()Какое окно фигурирует в ка-
> ве получателя сообщения ?


Не окно, А Application.Handle....

procedure TSvcAntiAutoRuns.ServiceCreate(Sender: TObject);
begin
 AFThrd   := TAntiAutoRunThread.Create(Application.Handle,WM_USER+1);



> Сергей М. ©   (01.10.07 17:33) [9]
> > в сервисе у меня запускается еще один потокСервис и так
> уже исполняется в собственном доп.потоке.Чем вызвана необходимость
> создавать еще один доп.поток ?


1. Для выполнения параллельности задачи.
2. в дальнейшей работе сервиса остановка OnExecut означает завершение работы сервиса,  а приостановка дочернего потока не завершает работу

Например в onExecut проверяется состояния дочернего потока

while Not (AFThrd.Status = TS_STOPED) do begin //...

3. Планируется, что эта программа будет работать и на win9х но только без запуска сервиса как простая программа, а для совместимости главна работа программы вынесена в отдельный юнит и поток, который может работать и там и там.


 
koha ©   (2007-10-01 18:11) [13]


> Sairex ©   (01.10.07 17:48) [10]
> Ребят а если не трудно то и на мой вопросик ответьте плииз:
>  Не моглибы вы скинуть пример (рабочий) сервиса, а то сколько
> не бился не получалось.


А что не получалось?


 
tesseract ©   (2007-10-01 18:12) [14]


> Не окно, А Application.Handle...


А может PostThreadMessage ?  Да и для кого семафоры и mutex-ы придумали ? Через них контроль работы потоков не проще будет вести?


 
koha ©   (2007-10-01 18:19) [15]


> tesseract ©   (01.10.07 18:12) [14]
> > Не окно, А Application.Handle...А может PostThreadMessage
> ?  Да и для кого семафоры и mutex-ы придумали ? Через них
> контроль работы потоков не проще будет вести?


- Для меня это еще уууу... Я еще только учусь. лопачу dooks разный, но везде так скудно написано, особенно в русско-язычной литературе, а главное мало написано о правильном проектировании подобных прогррамм.


 
koha ©   (2007-10-01 18:24) [16]


> tesseract ©   (01.10.07 18:12) [14]
> > Не окно, А Application.Handle...А может PostThreadMessage
> ?  Да и для кого семафоры и mutex-ы придумали ? Через них
> контроль работы потоков не проще будет вести?


- Для меня это еще уууу... Я еще только учусь. лопачу dooks разный, но везде так скудно написано, особенно в русско-язычной литературе, а главное мало написано о правильном проектировании подобных прогррамм.


 
Сергей М. ©   (2007-10-02 10:45) [17]


> Не окно, А Application.Handle


Application.Handle - это хэндл главного окна приложения.


 
Сергей М. ©   (2007-10-02 10:48) [18]


> koha


Ты осознаешь, что экземпляр сервис-приложения в контексте своего процесса может создавать более чем один сервис ?


 
koha ©   (2007-10-02 20:11) [19]


> Сергей М. ©   (02.10.07 10:48) [18]


В моей утилите только один экземпляр создается, а два одинаковых сервиса не запустятся.

Мне интересно как в таком случае работают некоторые антивирусы например AVP.EXE он же является и сервисом и имеет окна и взаимодействует с пользователем и ряд других антивирусов подобным образом устроены. По сути я  пытаюсь небольшую утилиту сделать которая будет удалять вредоносные программы. И хотел бы что бы она обладала такими способностями как проверка до входа юзера в систему и могла работать с интерфейсом пользователя и был один файл и работал как и на win9x так и NT платформе. Но похоже, что так не выйдет сервис сам по себе а интерфейс без входа пользователя существовать не межет, а сервис стартует раньше юзера. Вы правы на счет разделения их в корне интерфейс отдельно а сервис отдельно. Может ли это существовать все в одной программе? Но только запускаться будет по разному сперва как сервис, а когда юзер вошел как интерфейс другим процессом. Или все же делать лучше как советовали выше двумя разными модулями?

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


 
koha ©   (2007-10-02 21:08) [20]

> Сергей М. ©

Я думаю, что мог бы, приблизительно, так развести запуск в одном 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.


- ??


 
Johnmen ©   (2007-10-02 22:32) [21]


> Сергей М. ©   (01.10.07 14:40) [6]
> Еще раз - UI не является скол-либо оправданной задачей сервиса.

А чем он является?
И какие есть объективные причины для других категоричных высказываний в данной ветке?


 
Сергей М. ©   (2007-10-03 08:18) [22]


> В моей утилите только один экземпляр создается, а два одинаковых
> сервиса не запустятся


Я не про это.

Я про то что одно и то же сервис-приложение, будучи стартованным, в ходе работы вполне может создавать более чем один сервис.

См. File -> New -> Other.. -> Service


> Johnmen ©   (02.10.07 22:32) [21]



> чем он является?


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


> для других категоричных высказываний


Это каких ?)


 
koha ©   (2007-10-03 13:42) [23]


> Сергей М. ©   (03.10.07 08:18) [22]


Идею передавать сообщения Application.Handle сервису я уже передалываю, согласен, что протупил. Но все же некоторые программы работают так, уже выше упоминал (koha ©   (02.10.07 20:11) [19]). Они - то, что отступили от принципов или извращенцы? Или это нестандартное применение как новое направление? Ведь в свою очеред нетипичным было применение скинов все старались держаться в стороне, но winamp сделал "революцию".
Может быть у меня не правильное понятие о сути работы этих программ?


 
Сергей М. ©   (2007-10-03 13:52) [24]


> koha ©   (03.10.07 13:42) [23]


Ты, кстати, автовладелец ?

Понимаешь ли, двигатель существует сам по себе.
Его задача - двигать твой драндулет.

А вот контроль за работой двигателя - это задача разработчиков бортовых приборов контроля и собственно водилы, но никак не двигателя)

Та к вот сервис - это тот самый двигатель, а внешнее приложение - это те самые бортовые приборы контроля.


 
koha ©   (2007-10-03 14:00) [25]


> Сергей М. ©   (03.10.07 13:52) [24]


- идея с двигателями понятна, но вот идея с трансформерами не понятна.


 
Сергей М. ©   (2007-10-03 14:11) [26]


> идея с трансформерами не понятна


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

Либо то либо другое, о чем соббсно ты и упомянул в [20] и против чего я собссно и не имею возражений.

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


 
Johnmen ©   (2007-10-03 17:24) [27]


> Сергей М. ©   (03.10.07 08:18) [22]
> Организация UI - задача "обычных" приложений (в т.ч. апплетов, консольных).

В какой книге/на каком ресурсе про это написано?


 
Сергей М. ©   (2007-10-03 17:31) [28]


> 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:39) [29]


> Сергей М. ©   (03.10.07 17:31) [28]

Здесь ничего не говорится, что службы НЕ ДОЛЖНЫ / НЕ МОГУТ иметь UI, как можно было понять по твоим категорическим высказываниям.
И я бы сказал не "не жупел", а "не догма".


 
Leonid Troyanovsky ©   (2007-10-03 17:53) [30]


> Johnmen ©   (03.10.07 17:39) [29]

> Здесь ничего не говорится, что службы НЕ ДОЛЖНЫ / НЕ МОГУТ
> иметь UI

Помиритесь на GUI, т.е., службы могут быть как GUI так и нет.

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

--
Regards, LVT.


 
DVM ©   (2007-10-03 21:56) [31]


> Johnmen ©

Можно и на корову седло надеть и на скачках на ней выступать.
Скажите честно, Вы сами будете так делать (окна в службах)?
Вы, по-моему спорите только из-за того, что Вам не понравилось категоричное высказывание Сергея, но не более того. А Сергей ведь прав.
И здесь не нужно для доказательства приводить какие-то там выдержки из MSDN. Просто здравый смысл говорит о том, что окна в службах - это явно посторонняяя и чуждая назначению службы вещь.

Простой пример.

Есть некая служба, которая должна выводить некую информацию в некое окно и создавать иконку в области уведомлений для вывода этого окна.
Есть два варианта, первый окно выводит служба, второй - окно создается отдельной программой, запускаемой пользователем и эта же программа добавляет иконку.

Теперь, допустим, мы имеем несколько пользователей, одновременно вошедших в систему, например через сервер терминалов. Окна и иконки должны появиться у всех пользователей на их десктопах.
Что легче запрограммировать - окна в службе или отдельную программу взаимодействующую со службой для этого случая? Очевидно второе.


 
Johnmen ©   (2007-10-03 22:59) [32]


> DVM ©   (03.10.07 21:56) [31]
> Скажите честно, Вы сами будете так делать (окна в службах)?

Не только буду, но и был и есть. И никаких проблем не испытываю. А почему? А потому, что догматов не читал :)

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

Наверное, Гейтс думает по-другому? Иначе, зачем же ему GUI, например, для MSSQL Server, запущенному, как служба? Отрезал бы, и все дела...
Или же для IBServer (тоже, как служба)?


 
DVM ©   (2007-10-03 23:16) [33]


> Или же для IBServer (тоже, как служба)?

И где у него окна?


 
Anatoly Podgoretsky ©   (2007-10-03 23:23) [34]

> DVM  (03.10.2007 23:16:33)  [33]

У SQL тоже нет, все управление через внешние клиентские программы.


 
Сергей М. ©   (2007-10-04 08:22) [35]


> зачем же ему GUI, например, для MSSQL Server, запущенному,
>  как служба?


Иконку в трей запуздыривает не MSSQL-сервис, а сервис-менеджер (sqlmanagr.exe) - обычное гуёвое приложение.


 
Leonid Troyanovsky ©   (2007-10-04 09:09) [36]


> DVM ©   (03.10.07 21:56) [31]

> окна в службах - это явно посторонняяя и чуждая назначению
> службы вещь.

Окна в службах - нормальная вещь, многие сервисы являются
GUI приложениями.

А вот взамодействие юзера с этими окнами - извращение,
как со стороны здравого смысла, так и со стороны msdn.

--
Regards, LVT.


 
DVM ©   (2007-10-04 11:02) [37]


> Leonid Troyanovsky ©   (04.10.07 09:09) [36]


> Окна в службах - нормальная вещь, многие сервисы являются
> GUI приложениями.

Согласен, если только это скрытые, служебные окна, например для обработки сообщений от таймеров, сокетов и т.д.

Но зачем создавать GUI приложение с окнами и запускать его как сервис, если никто этот GUI никогда не увидит? Не понимаю. Только, если изначально приложение не было сервисом, а потом его решили таковым сделать.

То что многие сервисы имеют GUI - это говорит лишь о том, что такое возможно, но не о том что так стоит делать. Концептуально неправильно.


 
DVM ©   (2007-10-04 11:04) [38]

Кстати, тот же SQLServer.exe вообще не импортирует функцию CreateWindow(Ex) и в запущенном состоянии потребляет 0 объектов USER, что наводит на мысль о том, что вряд ли в его коде создается хоть одно окно вообще.



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

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

Наверх




Память: 0.56 MB
Время: 0.052 c
11-1175166440
SergeR
2007-03-29 15:07
2007.10.28
Маленькая проблемка со шрифтами


2-1191920909
Tron
2007-10-09 13:08
2007.10.28
Как подключить сетевой принтер?


1-1187346837
_Даня
2007-08-17 14:33
2007.10.28
Ошибка округления Trunc


8-1168554278
Infinityx93
2007-01-12 01:24
2007.10.28
Динамический Tseries в chart


15-1191481460
Niki
2007-10-04 11:04
2007.10.28
Геометрия





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский