Componentes.Terceros.FastRe.../official/4.3/Demos/ClientServer/Service/servmain.pas
2007-08-21 09:06:23 +00:00

177 lines
4.5 KiB
ObjectPascal

unit servmain;
{$I frx.inc}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
frxServer, DB, ADODB, frxClass, frxADOComponents, frxDBSet, frxGZip,
frxDCtrl, frxDMPExport, frxGradient, frxChBox, frxCross, frxRich,
frxChart, frxBarcode, frxServerUtils, ActiveX, Registry, IniFiles, frxUtils,
frxUsers, frxConfig;
type
TFastReport = class(TService)
ADOConnection: TADOConnection;
Serv: TfrxReportServer;
frxBarCodeObject1: TfrxBarCodeObject;
frxChartObject1: TfrxChartObject;
frxRichObject1: TfrxRichObject;
frxCrossObject1: TfrxCrossObject;
frxCheckBoxObject1: TfrxCheckBoxObject;
frxGradientObject1: TfrxGradientObject;
frxDotMatrixExport1: TfrxDotMatrixExport;
frxDialogControls1: TfrxDialogControls;
frxGZipCompressor1: TfrxGZipCompressor;
frxADOComponents1: TfrxADOComponents;
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceExecute(Sender: TService);
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceAfterInstall(Sender: TService);
private
{ Private declarations }
AppPath: String;
ConfFile: String;
AllowFile: String;
DenyFile: String;
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
const
CONFIG_FILE = 'config.xml';
// ALLOW_FILE = 'allow.conf';
// DENY_FILE = 'deny.conf';
var
FastReport: TFastReport;
dbMd: String;
implementation
uses ComObj;
{$R *.DFM}
var
DATABASE_FILE: String;
DBConnStr: String = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
FastReport.Controller(CtrlCode);
end;
function TFastReport.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TFastReport.ServiceStart(Sender: TService; var Started: Boolean);
var
ini: TIniFile;
begin
AppPath := GetAppPath;
ConfFile := AppPath + CONFIG_FILE;
// AllowFile := AppPath + ALLOW_FILE;
// DenyFile := AppPath + DENY_FILE;
// ini := TIniFile.Create(ConfFile);
// try
DATABASE_FILE := AppPath + 'database\server.mdb'; //AppPath + ini.ReadString('Database', 'Connection', 'database\server.mdb');
// finally
// ini.Free;
// end;
ADOConnection.ConnectionString := DBConnStr + DATABASE_FILE;
CoInitialize(nil);
try
ADOConnection.Open;
except
LogMessage('Database connection error');
end;
if ADOConnection.Connected then
begin
if FileExists(ConfFile) then
Serv.Configuration.LoadFromFile(ConfFile);
///!!!!
ServerUsers.LoadFromFile(AppPath + ServerConfig.GetValue('server.security.usersfile'));
if FileExists(AllowFile) then
begin
Serv.AllowIP.Clear;
Serv.AllowIP.LoadFromFile(AllowFile);
end;
if FileExists(DenyFile) then
begin
Serv.DenyIP.Clear;
Serv.DenyIP.LoadFromFile(DenyFile);
end;
Serv.Open;
end else
LogMessage('Database not connected');
Started := True;
end;
procedure TFastReport.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
if ADOConnection.Connected then
ADOConnection.Close;
Serv.Close;
Stopped := True;
end;
procedure TFastReport.ServicePause(Sender: TService; var Paused: Boolean);
begin
Serv.Close;
Paused := True;
end;
procedure TFastReport.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
ServiceThread.ProcessRequests(True);
Sleep(100);
end;
end;
procedure TFastReport.ServiceContinue(Sender: TService; var Continued: Boolean);
begin
Serv.Open;
Continued := True;
end;
procedure TFastReport.ServiceAfterInstall(Sender: TService);
var
Registry: TRegistry;
key: String;
begin
Registry := TRegistry.Create;
try
{$IFNDEF Delphi4}
Registry.Access := KEY_READ;
{$ENDIF}
Registry.RootKey := HKEY_LOCAL_MACHINE;
key := 'System\CurrentControlSet\Services\' + Name;
if Registry.KeyExists(key) then
begin
{$IFNDEF Delphi4}
Registry.Access := KEY_WRITE;
{$ENDIF}
Registry.OpenKey(key, True);
Registry.WriteString('Description', 'FastReport Server service. http://www.fast-report.com');
Registry.CloseKey;
end;
finally
Registry.Free;
end;
end;
end.