service application 我最近写了一个服务程序,但INSTALL以后,它只有启动功能,启动后,它就自动的停了。不知哪位高手能够提供一个服务程序的源代码,供我们学习一下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你启动后需要一个WHILE NOT TERMINATED DOBEGINEND;的死循环来处理,循环里面有异常等情况下就自动终止了; unit MailService;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, Db, ADODB, IniFiles, OleServer, ZMCRYPTLib_TLB, MailThread;type TService1 = class(TService) ADOConnection1: TADOConnection; ADODataSet1: TADODataSet; crypt31: Tcrypt3; ADODataSet2: TADODataSet; ADOCommand1: TADOCommand; ADODataSet3: TADODataSet; procedure ServiceStop(Sender: TService; var Stopped: Boolean); procedure ServiceStart(Sender: TService; var Started: Boolean); procedure ServicePause(Sender: TService; var Paused: Boolean); procedure ServiceContinue(Sender: TService; var Continued: Boolean); procedure ServiceShutdown(Sender: TService); procedure ServiceCreate(Sender: TObject); private { Private declarations } aThread: TMailThread; public { Public declarations } function GetServiceController: TServiceController; override; end;var ZmMailService: TService1;implementation{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;begin ZmMailService.Controller(CtrlCode);end;function TService1.GetServiceController: TServiceController;begin Result := ServiceController;end;procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);begin if aThread <> nil then aThread.Terminate; Stopped := true;end;procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);begin aThread := TMailThread.Create(false); //线程创建后马上开始运行 Started := true;end;procedure TService1.ServicePause(Sender: TService; var Paused: Boolean);begin if aThread <> nil then aThread.Suspend; Paused := true;end;procedure TService1.ServiceContinue(Sender: TService; var Continued: Boolean);begin if aThread <> nil then aThread.Resume; Continued := true;end;procedure TService1.ServiceShutdown(Sender: TService);begin if aThread <> nil then aThread.Terminate;end;procedure TService1.ServiceCreate(Sender: TObject);var IniFile: TIniFile; Server,DBUser,DBPassword: string;begin //从配置文件读取数据库配置信息 IniFile := TIniFile.Create('EDU.INI'); try Server := IniFile.ReadString('Database','Server',''); DBUser := IniFile.ReadString('Database','DBUser',''); DBPassword := IniFile.ReadString('Database','DBPassword',''); DBPassword := crypt31.RC4(DBPassword,DBUser); finally IniFile.Free; end; with ADOConnection1 do try ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;User ID=;' + 'Data Source=' + Server; Open(DBUser, DBPassword); finally end;end;end. 这样做会很耗内存吗?请高手指教。。。。 如何获得应用程序所在路径? 请问一个关于随机数的问题 用了1年多的delphi,不想在搞了,转搞vb, asp了, 然后向vb.net进军去了!!! :) 不是菜鸟能解决的问题 急啊 请问图形计算 如何发布C/S的程序??该程序用的是远程数据模块+SocketConnection 寻找刻录控件 这样的正则表达式要怎么写,超难 死马当活马医! 关于文件的操作问题 一个基本问题
BEGIN
END;的死循环来处理,循环里面有异常等情况下就自动终止了;
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
Db, ADODB, IniFiles, OleServer, ZMCRYPTLib_TLB, MailThread;type
TService1 = class(TService)
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
crypt31: Tcrypt3;
ADODataSet2: TADODataSet;
ADOCommand1: TADOCommand;
ADODataSet3: TADODataSet;
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServicePause(Sender: TService; var Paused: Boolean);
procedure ServiceContinue(Sender: TService; var Continued: Boolean);
procedure ServiceShutdown(Sender: TService);
procedure ServiceCreate(Sender: TObject);
private
{ Private declarations }
aThread: TMailThread;
public
{ Public declarations }
function GetServiceController: TServiceController; override;
end;var
ZmMailService: TService1;implementation{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;
begin
ZmMailService.Controller(CtrlCode);
end;function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;procedure TService1.ServiceStop(Sender: TService;
var Stopped: Boolean);
begin
if aThread <> nil then aThread.Terminate;
Stopped := true;
end;procedure TService1.ServiceStart(Sender: TService;
var Started: Boolean);
begin
aThread := TMailThread.Create(false); //线程创建后马上开始运行
Started := true;
end;procedure TService1.ServicePause(Sender: TService;
var Paused: Boolean);
begin
if aThread <> nil then aThread.Suspend;
Paused := true;
end;procedure TService1.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
if aThread <> nil then aThread.Resume;
Continued := true;
end;procedure TService1.ServiceShutdown(Sender: TService);
begin
if aThread <> nil then aThread.Terminate;
end;procedure TService1.ServiceCreate(Sender: TObject);
var
IniFile: TIniFile;
Server,DBUser,DBPassword: string;
begin
//从配置文件读取数据库配置信息
IniFile := TIniFile.Create('EDU.INI');
try
Server := IniFile.ReadString('Database','Server','');
DBUser := IniFile.ReadString('Database','DBUser','');
DBPassword := IniFile.ReadString('Database','DBPassword','');
DBPassword := crypt31.RC4(DBPassword,DBUser);
finally
IniFile.Free;
end; with ADOConnection1 do
try
ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;User ID=;' +
'Data Source=' + Server;
Open(DBUser, DBPassword);
finally end;
end;end.