C#- 写Windows服务

  同事离职后留一下程序,其中有一个Windows服务,让我产生来了想了解怎么写Windows服务的想法,百度后找到这篇文章,记录如下:

一、创建windows服务
如图新建一个Windows服务 
C#- 写Windows服务_第1张图片 
空白服务如下

public partial class Service1 : ServiceBase
    {


        System.Threading.Timer recordTimer;

        public Service1()
        {
            InitializeComponent();
        }


        //开始
        protected override void OnStart(string[] args)
        {
            IntialSaveRecord();
        }

        //停止
        protected override void OnStop()
        {
            DbTools.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>服务停止");
        }

        //继续
        protected override void OnContinue()
        {
            DbTools.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>服务继续");
            base.OnContinue();
        }

        //暂停
        protected override void OnPause()
        {
            DbTools.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>服务暂停");
            base.OnPause();
        }



        private void IntialSaveRecord()
        {
            TimerCallback timerCallback = new TimerCallback(CallbackTask);
            AutoResetEvent autoEvent = new AutoResetEvent(false);
            recordTimer = new System.Threading.Timer(timerCallback, autoEvent, 10000, 60000 * 10);
        }


        private void CallbackTask(Object stateInfo)
        {
            FileOpetation.SaveRecord(string.Format(@"当前记录时间:{0},状况:程序运行正常!", DateTime.Now));
        }

    }

 

只要在OnStart里完成你的功能代码即可。本例中我们做一个定时向本地文件写记录的功能。
如图
C#- 写Windows服务_第2张图片

创建一个类,用户写文件,

public class FileOpetation
    {
        /// <summary>
        /// 保存至本地文件
        /// </summary>
        /// <param name="ETMID"></param>
        /// <param name="content"></param>
        public static void SaveRecord(string content)
        {
            if (string.IsNullOrEmpty(content))
            {
                return;
            }


            FileStream fileStream = null;


            StreamWriter streamWriter = null;


            try
            {
                string path = Path.Combine(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase, string.Format("{0:yyyyMMdd}", DateTime.Now));


                using (fileStream = new FileStream(path, FileMode.Append, FileAccess.Write))
                {
                    using (streamWriter = new StreamWriter(fileStream))
                    {
                        streamWriter.Write(content);


                        if (streamWriter != null)
                        {
                            streamWriter.Close();
                        }
                    }


                    if (fileStream != null)
                    {
                        fileStream.Close();
                    }
                }
            }
            catch { }
        }
    }

那么在Service1中调用,

public partial class Service1 : ServiceBase
    {
        System.Threading.Timer recordTimer;


        public Service1()
        {
            InitializeComponent();
        }


        protected override void OnStart(string[] args)
        {
            IntialSaveRecord();
        }


        protected override void OnStop()
        {
            if (recordTimer != null)
            {
                recordTimer.Dispose();
            }
        }


        private void IntialSaveRecord()
        {
            TimerCallback timerCallback = new TimerCallback(CallbackTask);


            AutoResetEvent autoEvent = new AutoResetEvent(false);


            recordTimer = new System.Threading.Timer(timerCallback, autoEvent, 10000, 60000 * 10);
        }


        private void CallbackTask(Object stateInfo)
        {
            FileOpetation.SaveRecord(string.Format(@"当前记录时间:{0},状况:程序运行正常!", DateTime.Now));
        }
    }

这样服务算是写的差不多了,下面添加一个安装类,用于安装。
如图,在service1上右键-添加安装程序, 
C#- 写Windows服务_第3张图片
如图,添加一个安装程序, 
C#- 写Windows服务_第4张图片
如图,添加完成后, 
C#- 写Windows服务_第5张图片
设置相应的属性,给serviceInstaller1设置属性,主要是描述信息。如图, 
C#- 写Windows服务_第6张图片
给serviceProcessInstaller1设置,主要是account。一般选localsystem,如图, 
C#- 写Windows服务_第7张图片
这样服务已经写好了。那么如何添加到windows服务里面去呢。除了之前说过的用CMD,InstallUtil.exe和服务的exe文件进行手动添加。这些可以用代码来实现的。当然主要过程都是一样的。代码实现也是使用dos命令来完成的。
二、代码安装Windows服务
上面写好的服务,最终生成的是一个exe文件。 安装程序安装时需要用到这个exe的路径,所以方便起见,将这个生成的exe文件拷贝至安装程序的运行目录下。

运行完后,如图,

再在安装目录下看记录的文件,

C#- 写Windows服务_第8张图片

这样,一个windows服务安装成功了。

 

 

原文地址:http://www.cnblogs.com/keanuyaoo/p/3290074.html

你可能感兴趣的:(windows)