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