我做的一个APP SERVICE 程序为什么托盘出现两个图标
从网上找的例子,源来的忘了,记得最开始是一个图标,后来不知道为什么出现了两个图标。当服务停止时就报错,一个的时候没有报错!请大侠们帮忙看看!
unit LMS;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,Unit_FrmMain,WinSvc,registry,IniFiles;type THC_LMS_Service = class(TService) procedure ServiceContinue(Sender: TService; var Continued: Boolean); procedure ServiceExecute(Sender: TService); procedure ServicePause(Sender: TService; var Paused: Boolean); procedure ServiceShutdown(Sender: TService); procedure ServiceStart(Sender: TService; var Started: Boolean); procedure ServiceStop(Sender: TService; var Stopped: Boolean); procedure ServiceAfterInstall(Sender: TService); procedure SetDescription; private { Private declarations } public function GetServiceController: TServiceController; override; { Public declarations } end;var HC_LMS_Service: THC_LMS_Service; frmMain:TfrmMain;implementation{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;begin HC_LMS_Service.Controller(CtrlCode);end;function THC_LMS_Service.GetServiceController: TServiceController;begin Result := ServiceController;end;procedure THC_LMS_Service.ServiceContinue(Sender: TService;var Continued: Boolean);begin while not Terminated do begin Sleep(10); ServiceThread.ProcessRequests(False); end;end;procedure THC_LMS_Service.ServiceExecute(Sender: TService);begin while not Terminated do begin Sleep(10); ServiceThread.ProcessRequests(False); end;end;procedure THC_LMS_Service.ServicePause(Sender: TService;var Paused: Boolean);begin Paused := True;end;procedure THC_LMS_Service.ServiceShutdown(Sender: TService);begin gbCanClose := true; FrmMain.Free; Status := csStopped; ReportStatus();end;/// <example>/// <code>/// 启动服务/// </code>/// </example>procedure THC_LMS_Service.ServiceStart(Sender: TService;var Started: Boolean);begin Started := True; Svcmgr.Application.CreateForm(TFrmMain, FrmMain); gbCanClose := False; //读配置文件 // frmMain.T_pro.Enabled FrmMain.Hide;end;procedure THC_LMS_Service.ServiceStop(Sender: TService;var Stopped: Boolean);begin Stopped := True; gbCanClose := True; FrmMain.Free;end; procedure THC_LMS_Service.ServiceAfterInstall(Sender: TService); begin // 设置服务描述信息 self.SetDescription; end;procedure THC_LMS_Service.SetDescription;var reg:TRegistry;//注册表对象 ConfigIni:TIniFile; Desc:string;begin ConfigIni :=TIniFile.Create('LMS_Config.ini'); reg:=tregistry.create; try Desc :=ConfigIni.ReadString('Appinfo','Description','华创公司数据处理程序'); if Desc <>'' then begin reg.rootkey:=HKEY_LOCAL_MACHINE; with reg do begin if KeyExists('SYSTEM\\ControlSet001\\Services\\HC_LMS_Service') then begin if OpenKey('SYSTEM\\ControlSet001\\Services\\HC_LMS_Service',True) then begin WriteString('Description',Desc); end; end; end; end; finally Reg.CloseKey; reg.Free ; ConfigIni.Free; end;end;end.unit Unit_FrmMain;interfaceuses Windows, Messages, SysUtils, Variants, Classes, ShellApi, Graphics, Controls, Forms,Dialogs, ExtCtrls, StdCtrls, Menus, ComCtrls, ImgList,IniFiles, DB, ADODB, Grids, DBGrids;constWM_TrayIcon = WM_USER + 1234;type TfrmMain = class(TForm) StatusBar1: TStatusBar; T_pro: TTimer; Memo1: TMemo; ADOConnection1: TADOConnection; ADOConnection2: TADOConnection; ADOQuery1: TADOQuery; ADOQuery2: TADOQuery; DataSource1: TDataSource; DataSource2: TDataSource; DBGrid1: TDBGrid; DBGrid2: TDBGrid; procedure FormCreate(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormDestroy(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure
[解决办法]
太多了,不想看,不过估计是在没有关掉服务的时候又调用了THC_LMS_Service.ServiceStart(Sender: TService;var Started: Boolean);
函数。
[解决办法]
可以试试在TIMER里面做这样的处理:除去TRAYICON再建TRAYICON