svc95main.pas

来自「VC++实现的时间同步程序」· PAS 代码 · 共 69 行

PAS
69
字号
unit Svc95Main;

interface

procedure ServiceMain;

implementation

uses Windows, Messages, SysUtils, ActiveX, ComObj, ComServ, ConfigObj,
  NetTimeCommon, NetTimeThread, winerr, WinSvc;

const
  RPC_C_AUTHN_LEVEL_NONE = 1;
  RPC_C_IMP_LEVEL_IMPERSONATE = 3;
  EOAC_NONE = 0;

var
  DoneExit: boolean;

type
  TSetDoneObj = class
    class procedure DoExitNow(Sender: TObject);
  end;

class procedure TSetDoneObj.DoExitNow(Sender: TObject);
begin
  DoneExit := true;
end;

procedure ServiceMain;

var
  co: TConfigObj;
  tt: TNetTimeServer;
  Msg: TMsg;
  result: LongBool;

begin
  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 := TSetDoneObj.DoExitNow;
  tt.Start;
  DoneExit := false;
  repeat
    result := PeekMessage(Msg, 0, 0, 0, PM_REMOVE);
    if result then
      begin
        if (Msg.Message = WM_QUIT) or (Msg.Message = WM_ENDSESSION) then
          DoneExit := true;
        TranslateMessage(Msg);
        DispatchMessage(Msg);
      end
    else
      Sleep(GUISleepTime);
  until DoneExit;
  tt.Stop;
  CoUninitialize;
end;

end.

⌨️ 快捷键说明

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