![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сервис и 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.