⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servicemain.pas

📁 VC++实现的时间同步程序
💻 PAS
字号:
{ ************************************************************************

   NetTime is copyrighted by Graham Mainwaring. Permission is hereby
   granted to use, modify, redistribute and create derivative works
   provided this attribution is not removed. I also request that if you
   make any useful changes, please e-mail the diffs to graham@mhn.org
   so that I can include them in an 'official' release.

  ************************************************************************ }

unit ServiceMain;

interface

uses
  Windows, Messages, SysUtils, Classes, SvcMgr,
  NetTimeThread, ConfigObj, Mutex, NetTimeCommon, WinSvc;

type
  TNetTimeSvc = class(TService)
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
    procedure DoExitNow(Sender: TObject);
  private
    tt: TNetTimeServer;
    procedure WMEndSession(var Msg: TWMEndSession); message WM_ENDSESSION;
  public
    function GetServiceController: TServiceController; override;
  end;

var
  NetTimeSvc: TNetTimeSvc;

implementation

{$R *.DFM}

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

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

procedure TNetTimeSvc.DoExitNow(Sender: TObject);
begin
  Controller(SERVICE_CONTROL_STOP);
end;

procedure TNetTimeSvc.ServiceStart(Sender: TService; var Started: Boolean);

var
  co: TConfigObj;

begin
  if not GetExclusivity(ExNameServer) then
    raise exception.create('Cannot load NetTime server: Another server is already running');
  tt := TNetTimeServer.Create;
  co := TConfigObj.Create;
  try
    co.ReadFromRegistry;
    co.WriteToRunning(tt);
  finally
    co.Free;
  end;
  if (tt.Config.ServerCount = 0) then
    raise exception.create('NetTime has not been configured');
  tt.OnExitNow := DoExitNow;
  tt.Start;
  Started := true;
end;

procedure TNetTimeSvc.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  tt.Stop;
  Stopped := true;
end;

procedure TNetTimeSvc.WMEndSession(var Msg: TWMEndSession);
begin
  DoExitNow(Self);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -