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

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

Сервис и Win2000 [D6, D7, Win95/98, Win2k, WinXP]


kalishenko ©   (2003-09-30 18:30:00) 

Как написать свой сервис в Windows 2000? Зарегестрировать свое приложение в сервисах удалось, но запустить не получилось, т.к. сервисы запускаются и работают по-особенному. Так вот нет ли у кого примера написания сервиса?


pasha   (2003-10-04 01:45:00) [1]


> Гость из далека

Имя сервиса который ты создаеш задаётся в свойстве DisplayName. С таким именем он и появляется в окне сервисов. У меня тоже стоит WinXP и все мои сервисы видны.


pasha   (2003-10-04 01:41:00) [2]


> vadfe

Установи соответствующие свойства в такие значения
1. Interactive = True
2. ServiceType = stWin32
3. StartType = stAuto


vadfe   (2003-10-03 10:58:00) [3]

>pasha
Пишем сервис:
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
WinExec("C:\MyProgram.exe",SW_SHOW);
end;
//************
Запускаем сервис из консоли "Службы"
MyProgram.exe нормально запускается т.е. открыта форма, висит иконка в трее и т.д.
Перезагружаемся
Сервис стартует автоматически до загрузки рабочего стола.
После загрузки рабочего стола ни формы не видно, ни иконки в трее.
MyProgram.exe видна в taskmgr но остановить ее не получается.


Гость из далека   (2003-10-03 10:32:00) [4]


> pasha © (02.10.03 23:44) [12]
>
> > Гость из далека
>
>
> > Что то у меня в XP сервис не появляется :-(, куда копать?
>
> Попробуй нажать F5 в окне сервисов

И F5 и перезагрузка ничего не помогает :-(


pasha   (2003-10-02 23:47:00) [5]


> vadfe ©



> А почему если из сервиса запустить exe-шник до входа в систему,
> после входа окна ехе-шника не видно и убть его ничем не
> получается?

Не понял напиши по номальному


pasha   (2003-10-02 23:44:00) [6]


> Гость из далека


> Что то у меня в XP сервис не появляется :-(, куда копать?

Попробуй нажать F5 в окне сервисов


vadfe   (2003-10-02 17:58:00) [7]

А почему если из сервиса запустить exe-шник до входа в систему,
после входа окна ехе-шника не видно и убть его ничем не получается?


Гость из далека   (2003-10-02 14:49:00) [8]


> pasha © (01.10.03 02:29) [2]
> Зарегистрировать сервис в системе нужно так:
> Project1.exe /install, где Project1.exe твой скомпилированый
> проект.
> Удалить сервис из системе нужно так:
> Project1.exe /uninstall
> Запуск сервиса происходит в "Администрирование\Сервисы"
> находишь в списке имя своего сервиса(свойство DisplayName
> класса TServise) и запускаеш его
> Сервисы НЕ ПОДДЕРЖИВАЮТСЯ В WIN9X

Что то у меня в XP сервис не появляется :-(, куда копать?


kalishenko   (2003-10-02 14:44:00) [9]

Все заработало, как только я поставил ту самую птичку в "Разрешить взаимодействие с рабочим столом". И все-таки, что она означает понять до конца не могу. То ли это взаимодействие с графическим интерфейсом винды, то ли просто означает, что эта служба будет скрытой от глаз...


kalishenko   (2003-10-02 14:24:00) [10]

>>pasha
>>1.Как ты проверяш что сервис запустился?

Так как после запуска сервиса из служб ошибка не вылетает, то, по-идее, все нормально.

>>2.Какая у тебя операционка?

XP и Win2000 Server.

>>kavboy

>>А в свойствах службы на закладке "Вход в систему" поставил птичку "Разрешить взаимодействие с рабочим столом"?

А что эта птичка означает и на что она влияет?


kavboy   (2003-10-02 11:01:00) [11]

А в свойствах службы на закладке "Вход в систему" поставил птичку "Разрешить взаимодействие с рабочим столом"?


younghacker   (2003-10-02 09:45:00) [12]

Ребята не балуйтесь с FindWindow!

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

Тоесть сессии изолированы от процессов даже на уровне
мутексов и файл мапинга. И из интерактивной сессии - невозможно при помощи FindWindow найти окно процесса.

Такое чувство что на разных компах работает все.

Удачи!


Digitman   (2003-10-02 08:51:00) [13]

MessageBox(0,"Это тест моей службы","From My Service", mb_ok);


pasha   (2003-10-01 22:50:00) [14]

1.Как ты проверяш что сервис запустился?
2.Какая у тебя операционка?


kalishenko   (2003-10-01 18:41:00) [15]

Че-то никакого сигнала нет, хотя сервис вроде запускается. Вместо beep пробовал выдавать какое-нибудь сообщение

MessageBox(FindWindow(nil,"Delphi 6 - Project1"),"Это тест моей службы","From My Service",0);

но в ответ тишина...


pasha   (2003-10-01 02:29:00) [16]

Зарегистрировать сервис в системе нужно так:
Project1.exe /install, где Project1.exe твой скомпилированый проект.
Удалить сервис из системе нужно так:
Project1.exe /uninstall
Запуск сервиса происходит в "Администрирование\Сервисы" находишь в списке имя своего сервиса(свойство DisplayName класса TServise) и запускаеш его
Сервисы НЕ ПОДДЕРЖИВАЮТСЯ В WIN9X


pasha   (2003-10-01 02:20:00) [17]

Вот тебе пример елементарного сервиса:
//Сигнал через определённое время


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
ExtCtrls;

type
TService1 = class(TService)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceExecute(Sender: TService);
private
{ Private declarations }
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;

var
Service1: TService1;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;

function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;

procedure TService1.Timer1Timer(Sender: TObject);
begin
SysUtils.Beep;
end;

procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
Timer1.Enabled := true;
end;

procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
Timer1.Enabled := false;
end;

procedure TService1.ServicePause(Sender: TService; var Paused: Boolean);
begin
Timer1.Enabled := false;
end;

procedure TService1.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
Timer1.Enabled := true;
end;

procedure TService1.ServiceExecute(Sender: TService);
begin
while not Terminated do
ServiceThread.ProcessRequests(true);
end;

end.


Наверх

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