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的路径

  • 相关阅读:
    [component]button skin–按钮组件外观
    as3 图片平滑方法
    SOLVED: Right Click in AS3
    一个超高效的不规则物体碰撞检测的类
    flex中的css应用
    控制时间间隔
    用flash cs3美化flex3之skin开发
    AS3实现RPG游戏鼠标8方向操作
    log4net basic example write to file
    观察者模式(C#实现 + eventhandler)
  • 原文地址:https://www.cnblogs.com/DSC1991/p/8632095.html
Copyright © 2011-2022 走看看