用托盘控制windows服务的c#实现 (转) using System; namespace UBISerialsController...{ /**//// /// Class1 的摘要说明。 /// public class Class1 ...{ static System.ServiceProcess.ServiceController sc; static System.Windows.Forms.NotifyIcon ni; static System.Windows.Forms.ContextMenu cm; static System.Timers.Timer timer; public Class1() ...{ // // TODO: 在此处添加构造函数逻辑 // } static void Main() ...{ try ...{ sc=new System.ServiceProcess.ServiceController("UBISerials"); ni=new System.Windows.Forms.NotifyIcon(); ni.Visible=false; cm=new System.Windows.Forms.ContextMenu(); cm.MenuItems.Add(new System.Windows.Forms.MenuItem("停止",new EventHandler(StopService))); cm.MenuItems.Add(new System.Windows.Forms.MenuItem("暂停",new EventHandler(PauseService))); cm.MenuItems.Add(new System.Windows.Forms.MenuItem("继续",new EventHandler(ContiuneService))); cm.MenuItems.Add(new System.Windows.Forms.MenuItem("开始",new EventHandler(StartService))); cm.MenuItems.Add("-"); cm.MenuItems.Add(new System.Windows.Forms.MenuItem("关于",new EventHandler(About))); cm.MenuItems.Add(new System.Windows.Forms.MenuItem("退出",new EventHandler(Exit))); ni.ContextMenu=cm; ni.Visible=true; SetUpTimer(); System.Windows.Forms.Application.Run(); } catch(System.Exception ex) ...{ System.Windows.Forms.MessageBox.Show(ex.Message.ToString()); } } private static void StopService(object sender,System.EventArgs e) ...{ if(sc.Status==System.ServiceProcess.ServiceControllerStatus.Running&&sc.CanStop==true) ...{ try ...{ sc.Stop(); } catch(System.Exception ex) ...{ System.Windows.Forms.MessageBox.Show(ex.Message.ToString()); } } } private static void PauseService(object sender,System.EventArgs e) ...{ if(sc.Status!=System.ServiceProcess.ServiceControllerStatus.Paused&&sc.CanPauseAndContinue==true) ...{ try ...{ sc.Pause(); } catch(System.Exception ex) ...{ System.Windows.Forms.MessageBox.Show(ex.Message.ToString()); } } } private static void ContiuneService(object sender,System.EventArgs e) ...{ if(sc.Status==System.ServiceProcess.ServiceControllerStatus.Paused&&sc.CanPauseAndContinue==true) ...{ try ...{ sc.Continue(); } catch(System.Exception ex) ...{ System.Windows.Forms.MessageBox.Show(ex.Message.ToString()); } } } private static void StartService(object sender,System.EventArgs e) ...{ if(sc.Status==System.ServiceProcess.ServiceControllerStatus.Stopped) ...{ try ...{ sc.Start(); } catch(System.Exception ex) ...{ System.Windows.Forms.MessageBox.Show(ex.Message.ToString()); } } } private static void About(object sender,System.EventArgs e) ...{ System.Windows.Forms.MessageBox.Show("2005.4.3","关于"); } private static void Exit(object sender,System.EventArgs e) ...{ try ...{ timer.Dispose(); sc.Dispose(); cm.Dispose(); ni.Dispose(); System.Windows.Forms.Application.Exit(); } catch(System.Exception ex) ...{ System.Windows.Forms.MessageBox.Show(ex.Message.ToString()); } } private static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) ...{ GetServiceState(); } private static void GetServiceState() ...{ sc.Refresh(); switch(sc.Status) ...{ case System.ServiceProcess.ServiceControllerStatus.Stopped: ...{ ni.Icon=new System.Drawing.Icon("stopped.ico"); cm.MenuItems[0].Enabled=false; cm.MenuItems[1].Enabled=false; cm.MenuItems[2].Enabled=false; cm.MenuItems[3].Enabled=true; break; } case System.ServiceProcess.ServiceControllerStatus.Running: ...{ ni.Icon=new System.Drawing.Icon("started.ico"); cm.MenuItems[0].Enabled=true; cm.MenuItems[1].Enabled=true; cm.MenuItems[2].Enabled=false; cm.MenuItems[3].Enabled=false; break; } case System.ServiceProcess.ServiceControllerStatus.Paused: ...{ ni.Icon=new System.Drawing.Icon("paused.ico"); cm.MenuItems[0].Enabled=false; cm.MenuItems[1].Enabled=false; cm.MenuItems[2].Enabled=true; cm.MenuItems[3].Enabled=false; break; } default: ...{ ni.Icon=new System.Drawing.Icon("paused.ico"); break; } } } private static void SetUpTimer() ...{ timer=new System.Timers.Timer(); timer.Interval=500; timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); timer.Start(); } }}