• 用托盘控制windows服务的c#实现


    http://www.csdn.net/Develop/Read_Article.asp?Id=20312

    孟子e章给出的vb代码,现在从这个代码翻译成c#,给习惯c#的人参考
    需要注意的是图片一定需要是ico格式,否则可能会导致托盘的不显示

    using System;

    namespace UBISerialsController
    {
     /// <summary>
     /// Class1 的摘要说明。
     /// </summary>
     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();
      }
     }
    }

  • 相关阅读:
    吴裕雄--天生自然 python语言数据分析:开普勒系外行星搜索结果分析
    吴裕雄--天生自然 R语言数据分析:火箭发射的地点、日期/时间和结果分析
    吴裕雄--天生自然 PYTHON数据分析:基于Keras的CNN分析太空深处寻找系外行星数据
    吴裕雄--天生自然 python数据分析:基于Keras使用CNN神经网络处理手写数据集
    吴裕雄--天生自然 PYTHON数据分析:钦奈水资源管理分析
    吴裕雄--天生自然 PYTHON数据分析:医疗数据分析
    独家解密:阿里大规模数据中心性能分析
    日志服务Python消费组实战(三):实时跨域监测多日志库数据
    日志服务Python消费组实战(二):实时分发数据
    日志服务与SIEM(如Splunk)集成方案实战
  • 原文地址:https://www.cnblogs.com/lovecherry/p/131775.html
Copyright © 2020-2023  润新知