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

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

Сервис [D7, XP]


Страницы:   1 2 3 4

Levin_610 ©   (2006-07-14 12:50:00) 

как зарегестрировать программу, как сервис?


Levin_610   (2006-07-18 12:24:00) [21]

правильно боялся, у меня почему-то, регистроваться-то регистрируется, и удаляется, но не запускается, если пытаюсь запустить, то пишет следующее: ошибка2: не удаётся найти указанный файл


isasa   (2006-07-18 10:38:00) [22]

Да.
Статью с rsdn почитай. Там про время откликов потоков сервиса -- очень актуальнай момент(не только для корректного завершения)


isasa   (2006-07-18 10:35:00) [23]

:)
ну вот, а ты боялся ...


Levin_610   (2006-07-18 09:36:00) [24]

спасибо за помощь, я уже написал, всё получилось, спасибо


Игорь Шевченко   (2006-07-17 17:48:00) [25]

Пусик ©   (17.07.06 17:43) [43]

flame > /dev/null


Пусик   (2006-07-17 17:43:00) [26]


> Fay ©   (17.07.06 17:30) [42]
> 2 Пусик ©   (17.07.06 17:14) [39]> А прежде подумать, а
> потом говорить, тоже не судьба?О чём это, таком умном, нужно
> было подумать?


О вечном, непреходящем. А также см. [41].

Прежде, чем цепляться к пуговицам, подумай о цели и назначении предмета одежды.

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


Fay   (2006-07-17 17:30:00) [27]

2 Пусик ©   (17.07.06 17:14) [39]
> А прежде подумать, а потом говорить, тоже не судьба?
О чём это, таком умном, нужно было подумать?


Пусик   (2006-07-17 17:27:00) [28]


> Игорь Шевченко ©   (17.07.06 17:20) [40]
> > ThrTimer.FS := TFileStream.Create('c:\log.tmp',fmCreate
> > or fmShareDenyWrite);or fmShareDenyWrite - лишнее. fmCreate
> равен $FFFF


Совершенно верно.

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


Игорь Шевченко   (2006-07-17 17:20:00) [29]


> ThrTimer.FS := TFileStream.Create('c:\log.tmp',fmCreate
> or fmShareDenyWrite);


or fmShareDenyWrite - лишнее. fmCreate равен $FFFF


Пусик   (2006-07-17 17:14:00) [30]


> Fay ©   (17.07.06 17:13) [38]
> 2 Пусик ©   (17.07.06 15:29) [35]> Дело в том, что при TFileStream.
> CreateА CreateFile не судьба?


А прежде подумать, а потом говорить, тоже не судьба?


Fay   (2006-07-17 17:13:00) [31]

2 Пусик ©   (17.07.06 15:29) [35]
> Дело в том, что при TFileStream.Create
А CreateFile не судьба?


Игорь Шевченко   (2006-07-17 17:10:00) [32]

Порнография на самом деле находится в SysUtils, не позволяющая передать в функцию FileCreate параметр режима разделения доступа.


Пусик   (2006-07-17 15:31:00) [33]

> DrPass ©   (17.07.06 15:14) [33]

Да и не в том вопрос. Приведен рабочий пример. Как и просил человек.
А все вокруг - излишне.


Пусик   (2006-07-17 15:29:00) [34]


> Fay ©   (17.07.06 15:18) [34]
> 2 Пусик ©   (17.07.06 15:12) [32]> Внимательней код изучай.
> Я изучил. Порнография в чистом виде


Вот иди и займись ей(порнографией).


> DrPass ©   (17.07.06 15:14) [33]


Дело в том, что при TFileStream.Create('c:\log.tmp',fmCreate or fmShareDenyWrite) нужный эффект(доступ на чтение из других программ) не будет достигнут.


Fay   (2006-07-17 15:18:00) [35]

2 Пусик ©   (17.07.06 15:12) [32]
> Внимательней код изучай.
Я изучил. Порнография в чистом виде.


DrPass   (2006-07-17 15:14:00) [36]

А почему не
if not FileExists('c:\log.tmp') then
   ThrTimer.FS := TFileStream.Create('c:\log.tmp',fmCreate or fmShareDenyWrite)
else
 ThrTimer.FS := TFileStream.Create('c:\log.tmp',fmOpenReadWrite or fmShareDenyWrite);
?


Пусик   (2006-07-17 15:12:00) [37]


> Fay ©   (17.07.06 14:54) [31]
> 2 Пусик ©   (17.07.06 14:48) [30]if not FileExists('c:\log.
> tmp') then   begin     ThrTimer.FS := TFileStream.Create('c:
> \log.tmp',fmCreate or fmShareDenyWrite);     ThrTimer.FS.
> Free;   end;   ThrTimer.FS := TFileStream.Create('c:\log.
> tmp',fmOpenReadWrite or fmShareDenyWrite);что это за порнография?
>


Внимательней код изучай.


Fay   (2006-07-17 14:54:00) [38]

2 Пусик ©   (17.07.06 14:48) [30]
if not FileExists('c:\log.tmp') then
  begin
    ThrTimer.FS := TFileStream.Create('c:\log.tmp',fmCreate or fmShareDenyWrite);
    ThrTimer.FS.Free;
  end;
  ThrTimer.FS := TFileStream.Create('c:\log.tmp',fmOpenReadWrite or fmShareDenyWrite);


что это за порнография?


Пусик   (2006-07-17 14:48:00) [39]


> Levin_610 ©   (17.07.06 12:05) [24]
> ссылку на какой-нибудь нормальный готовый класс можешь дать?
>


Вот рабочий код.

unit Unit1;

interface

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

type

 TThreadTimer=class(TThread)
 protected
   FS: TFileStream;
   procedure Execute; override;
 end;

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

var
 TwoService: TTwoService;
 ThrTimer: TThreadTimer;

implementation

{$R *.DFM}

{TTwoService}

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

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

procedure TTwoService.ServiceExecute(Sender: TService);
begin
   while not terminated do
   begin
     ServiceThread.ProcessRequests(True);
   end;
end;

procedure TTwoService.ServiceStart(Sender: TService; var Started: Boolean);
begin
 ThrTimer := TThreadTimer.Create(True);
 ThrTimer.FreeOnTerminate := True;
 try
   if not FileExists('c:\log.tmp') then
   begin
     ThrTimer.FS := TFileStream.Create('c:\log.tmp',fmCreate or fmShareDenyWrite);
     ThrTimer.FS.Free;
   end;
   ThrTimer.FS := TFileStream.Create('c:\log.tmp',fmOpenReadWrite or fmShareDenyWrite);

   Started := True;
 except
   ThrTimer.Terminate;
   Started := False;
 end;
 ThrTimer.Resume;
end;

procedure TTwoService.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
 ThrTimer.Terminate;
 ThrTimer.Resume;
 Stopped := True;
end;

procedure TTwoService.ServiceContinue(Sender: TService;
 var Continued: Boolean);
begin
 ThrTimer.Resume;
 Continued := True;
end;

procedure TTwoService.ServicePause(Sender: TService; var Paused: Boolean);
begin
ThrTimer.Suspend;
Paused := True;
end;

{ TThreadTimer }

procedure TThreadTimer.Execute;
var
 s: String;
begin
 while not Terminated do
 begin
   try
     s := FormatDateTime('hh:nn:ss',Now)+#13#10;
     FS.Write(s[1],Length(s));
     Sleep(1000);
   except
   end;
 end;
 FS.Free;
end;

end.


Fay   (2006-07-17 14:40:00) [40]

2 Levin_610 ©   (17.07.06 12:52) [28]
Что возвращает CreateService?


Страницы:   1 2 3 4

Наверх

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