Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.12;
Скачать: CL | DM;

Вниз

Сервис и Win2000   Найти похожие ветки 

 
kalishenko   (2003-09-30 18:30) [0]

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


 
pasha ©   (2003-10-01 02:20) [1]

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


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.



 
pasha ©   (2003-10-01 02:29) [2]

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


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

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

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

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


 
pasha ©   (2003-10-01 22:50) [4]

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


 
Digitman ©   (2003-10-02 08:51) [5]

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


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

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

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

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

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

Удачи!


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

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


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

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

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

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

XP и Win2000 Server.

>>kavboy

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

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


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

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


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


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

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


 
vadfe ©   (2003-10-02 17:58) [11]

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


 
pasha ©   (2003-10-02 23:44) [12]


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


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

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


 
pasha ©   (2003-10-02 23:47) [13]


> vadfe ©



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

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


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


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

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


 
vadfe ©   (2003-10-03 10:58) [15]

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


 
pasha ©   (2003-10-04 01:41) [16]


> vadfe

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


 
pasha ©   (2003-10-04 01:45) [17]


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

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



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

Текущий архив: 2003.12.12;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.022 c
14-36827
IgAn
2003-11-19 06:53
2003.12.12
Почему то не работает


7-36866
KIE
2003-10-06 12:19
2003.12.12
Как мне получить изображение с ...


14-36849
tics
2003-11-20 16:53
2003.12.12
Форумы


3-36550
rosl
2003-11-13 08:27
2003.12.12
запрос sql


1-36726
Ил_204
2003-12-02 11:22
2003.12.12
GetMem, FillChar