zoukankan      html  css  js  c++  java
  • windows服务

    当我们做项目的时候,经常会遇到一种情况就是:需要隔一段时间就执行某些操作,比如数据库统计,删除多余的文件防止项目占用很多空间等等。

    下面通过一个小demo来说明Windows服务与安装。

    1–> 创建项目

    这里写图片描述

    2–> 右键点击Service1.cs,查看代码, 用于编写操作逻辑代码。逻辑代码包括两个部分,OnStart和OnStop。我们主要修改的是OnStart中的内容,即:服务开启之后执行的逻辑

    这里写图片描述

    3 –> 由于我们需要每隔一段时间就执行一次,一般使用timer,便于隔一段事件执行一回,在代码中添加一个timer,并实现timer的Elapsed事件。主要代码:

    private System.Timers.Timer myTimer;//timer
            /// <summary>
            /// 重写服务OnStart方法
            /// </summary>
            /// <param name="args"></param>
            protected override void OnStart(string[] args)
            {
                myTimer = new System.Timers.Timer();
                myTimer.Interval = 60000; //设置计时器事件间隔执行时间
                myTimer.Elapsed += (timer1_Elapsed);
                myTimer.Enabled = true;
    
            }
    
            /// <summary>
            /// 重写服务OnStop方法
            /// </summary>
            protected override void OnStop()
            {
    
            }
    
            /// <summary>
            /// timer
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void timer1_Elapsed(object sender, ElapsedEventArgs e)
            {
                try
                {
                    DoWork();
                }
                catch (Exception ex)
                {
    
                }
            }
    
            //逻辑代码
            void DoWork()
            {
    
            }

    至此,逻辑部分代码基本就写完了。

    4 –> 创建安装服务。双击解决方案中Service1,打开视图设计器。

    这里写图片描述

    5 –> 在视图内【右键】——-【添加安装程序】。项目中添加了ProjectInstaller.cs文件,该文件中视图自动会添加俩个组件 
    serviceProcessInstaller1 
    serviceInstaller1

    这里写图片描述

    6 –> 选中serviceProcessInstaller1组件,查看属性,设置account为LocalSystem

    这里写图片描述

    7 –> 选中serviceInstaller1组件,查看属性 
    设置ServiceName的值, 该值表示在系统服务中的名称 
    设置StartType, 如果为Manual则手动启动,默认停止,如果为Automatic为自动启动 
    设置Description,添加服务描述

    这里写图片描述

    ServiceName:该值表示在系统服务中的名称 。即红色框中的部分,这个值不能为空,否则在系统服务中找不到(以前做服务一不小心就这样了).

    这里写图片描述

    设置Description,添加服务描述:

    这里写图片描述

    让后就可以生成项目,准备安装了。

    8 – > 安装服务。

    a . 运行cmd,获取命令提示符win7需要已管理员的身份启动,否则无法安装 
    这里写图片描述

    b . 由于demo的框架使用的是4.5的,所以输入 cd C:WindowsMicrosoft.NETFrameworkv4.0.30319 回车 
    切换当前目录,此处需要注意的是,在C:WindowsMicrosoft.NETFramework目录下有很多类似版本,具体去哪个目录要看项目的运行环境,例 如果是.net framework2.0则需要输入 cd C:WindowsMicrosoft.NETFrameworkv2.0.50727

    这里写图片描述

    c . 输入 InstallUtil.exe E:…TestServert.exe 回车 
    说明:E:…TestServer.exe表示项目生成的exe文件位置

    这里写图片描述

    打开服务,就可以看到已经安装的服务了

    9 – >卸载服务

    卸载很简单,打开cmd, 直接输入 sc delete TestServer便可.删除服务的时候,E:…TestServert.exe这个路径必须存在,否则会删除不成功。

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    public partial class Service1 : ServiceBase
    {

    System.Threading.Timer recordTimer;
    public Service1()
    {
    InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
    // TODO: 在此处添加代码以启动服务。
    IntialSaveRecord();
    }

    protected override void OnStop()
    {
    // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
    if (recordTimer != null)
    {
    recordTimer.Dispose();
    }
    }

    /// <summary>
    /// 定时检查,并执行方法
    /// </summary>
    /// <param name="source"></param>
    /// <param name="e"></param>
    private void IntialSaveRecord()
    {
    //10000毫秒=10秒    1000毫秒=1秒
    TimerCallback timerCallback = new TimerCallback(CallbackTask);   //加载事件
    AutoResetEvent autoEvent = new AutoResetEvent(false);
    recordTimer = new System.Threading.Timer(timerCallback, autoEvent, 0, 1800000);//其中参数10000表示延时执行服务的时间间隔,毫秒为单位

    或者(定时服务)

    System.Timers.Timer t = new System.Timers.Timer();//实例化Timer类,设置间隔时间为1000毫秒;
    t.Elapsed += new System.Timers.ElapsedEventHandler(OrderTimer_Tick);//到时间的时候执行事件;
    t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);

    t.Interval=1000;

    t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;


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

    }

    windows服务安装步骤:
    1. cd C:WindowsMicrosoft.NETFrameworkv4.0.30319
    2. InstallUtil.exe exe的路径
    卸载:
    InstallUtil.exe /u exe的路径

  • 相关阅读:
    [转发]深入理解git,从研究git目录开始
    iOS系统网络抓包方法
    charles抓包工具
    iOS多线程中performSelector: 和dispatch_time的不同
    IOS Core Animation Advanced Techniques的学习笔记(五)
    IOS Core Animation Advanced Techniques的学习笔记(四)
    IOS Core Animation Advanced Techniques的学习笔记(三)
    IOS Core Animation Advanced Techniques的学习笔记(二)
    IOS Core Animation Advanced Techniques的学习笔记(一)
    VirtualBox复制CentOS后提示Device eth0 does not seem to be present的解决方法
  • 原文地址:https://www.cnblogs.com/DSC1991/p/8632095.html
Copyright © 2011-2022 走看看