代码改变世界

Windows服务程序时钟调用

2014-04-01 11:36  夜雨瞳  阅读(1515)  评论(0编辑  收藏  举报

1       大概思路

  • 设计服务程序
  • 创建服务
  • 安装必备组件
  • 编写Service1
  • 运行效果

 

2       设计服务程序

创建服务程序,通过添加System.Timers时钟进行定时向Wecome.txt写入文本。

3       创建服务

创建项目、安装项目

(通过工具箱添加System.Timers组件,系统时钟组件,不同于System.Windows.Forms)

 

4       安装必备组件

5       编写Service1

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;

using System.IO;

namespace WindowsServiceDemo
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 标识开始
        /// </summary>
        private string flag = string.Empty;
        /// <summary>
        /// 允许时钟开始
        /// </summary>
        private bool isBegin = true;

        protected override void OnStart(string[] args)
        {
            flag = "开始时间:";
            this.timer1.Enabled = true;

        }

        protected override void OnStop()
        {
        }

        /// <summary>
        /// 9000毫秒调度一次,即9秒高度一次
        /// create by zhyongfeng in 2014-03-26
        /// </summary>
        /// <param name="sender">object</param>
        /// <param name="e"> System.Timers.ElapsedEventArgs</param>
        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //开始
            if (!isBegin)
                return;
            isBegin = false;
            try
            {
                FileStream nFile = new FileStream(System.AppDomain.CurrentDomain.BaseDirectory + "Wecome.txt", FileMode.Append, FileAccess.Write);
                StreamWriter writer = new StreamWriter(nFile);
                writer.WriteLine(flag + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                writer.WriteLine("Welcome to Write:" + DateTime.Now.ToFileTimeUtc().ToString());
                writer.WriteLine();
                writer.Close();
                LogUtility.Logging(Process.GetCurrentProcess().MainModule.ModuleName, Process.GetCurrentProcess().MachineName, Process.GetCurrentProcess().MainModule.ModuleName, LogUtility.EVENT.EVENT_WARNING, "新增了");
            }
            catch
            {
            }
            isBegin = true;
        }
    }
}

 

6       运行效果

开始->运行->services.msc,可见如下图

 

开始->运行->eventvwr.msc,可见如下图

 

7       总结

Windows服务可通过修改以下属性,通过System.Timers组件达到自动控制的功能,针对一些运行周期长的数据可通过Windows服务处理(如通过捕捉大量数据收发邮件等)。

serviceInstaller1属性值说明

Manual:服务安装后,必须手动启动。

Automatic :每次计算机重新启动时,服务都会自动启动。

Disabled:  服务无法启动。

 

源代码下载:

https://files.cnblogs.com/yongfeng/WindowsServiceDemo.rar

PDF下载:

Windows服务程序时钟调用.pdf

Windows服务创建文档.pdf