首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

小弟我做的一个APP SERVICE 程序为什么托盘出现两个图标

2012-03-23 
我做的一个APP SERVICE 程序为什么托盘出现两个图标从网上找的例子,源来的忘了,记得最开始是一个图标,后来

我做的一个APP SERVICE 程序为什么托盘出现两个图标
从网上找的例子,源来的忘了,记得最开始是一个图标,后来不知道为什么出现了两个图标。当服务停止时就报错,一个的时候没有报错!请大侠们帮忙看看!

Delphi(Pascal) code
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

热点排行