zoukankan      html  css  js  c++  java
  • C#- 写Windows服务

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

    一、创建windows服务
    如图新建一个Windows服务 
     
    空白服务如下

    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里完成你的功能代码即可。本例中我们做一个定时向本地文件写记录的功能。
    如图

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

    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上右键-添加安装程序, 

    如图,添加一个安装程序, 

    如图,添加完成后, 

    设置相应的属性,给serviceInstaller1设置属性,主要是描述信息。如图, 

    给serviceProcessInstaller1设置,主要是account。一般选localsystem,如图, 

    这样服务已经写好了。那么如何添加到windows服务里面去呢。除了之前说过的用CMD,InstallUtil.exe和服务的exe文件进行手动添加。这些可以用代码来实现的。当然主要过程都是一样的。代码实现也是使用dos命令来完成的。
    二、代码安装Windows服务
    上面写好的服务,最终生成的是一个exe文件。 安装程序安装时需要用到这个exe的路径,所以方便起见,将这个生成的exe文件拷贝至安装程序的运行目录下。

    运行完后,如图,

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

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

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

  • 相关阅读:
    理解Javascript_13_执行模型详解
    vs2005的快捷键
    去除 VS.Net 2003 项目的 VSS 息的脚本
    VS2005的隐藏快捷键
    程序员,你离坐牢还有多远
    对路径XXX的访问被拒绝(文件操作权限)的解决方法
    安装VS2005 SP1之后无法更改或卸载VS2005的处理方法
    强大的.NET反编译工具Reflector及插件
    反编译工具Reflector下载(集成两个常用.net插件,FileGenerator和FileDisassembler)
    两种彻底删除VIEWSTATE的方法
  • 原文地址:https://www.cnblogs.com/cxeye/p/4203543.html
Copyright © 2011-2022 走看看