zoukankan      html  css  js  c++  java
  • 用托盘控制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();
      }
     }
    }

  • 相关阅读:
    [转载]tlb、tlh和tli文件的关系
    [转载]美国不是中国唯一的榜样
    使用spring.net 1.3.2框架部署在虚拟目录上发生错误
    用Log4Net记录NHibernate中执行的SQL语句及执行时间
    IIS7/8 HTTP Error 500.19 错误 0x80070021
    IE下点击scrollbar会导致焦点移动到body
    性能测试学习(一)--基础知识点
    测试基础知识点汇总
    如何制定测试计划
    《软件测试经验与教训》摘录
  • 原文地址:https://www.cnblogs.com/lovecherry/p/131775.html
Copyright © 2011-2022 走看看