c# windows service

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
 
namespace WindowsServiceTest
{
    public partial class ServiceTest : ServiceBase
    {
        private DataSet _Ds = new DataSet();
        //设置xml文件保存路径
        private string _FilePath = @"D:\记录开关机时间.xml";
 
        public ServiceTest()
        {
            InitializeComponent();
        }
 
        protected override void OnStart(string[] args)
        {
            //每隔一分钟记录一次更新一次关机时间
            System.Timers.Timer timer = new System.Timers.Timer(60000);
            timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Click);
            timer.AutoReset = true;
            timer.Enabled = true;
 
            //判断文件是否存在
            if (!System.IO.File.Exists(_FilePath))
            {
                CreateDataTable();
            }
            else
            {
                _Ds.ReadXml(_FilePath, XmlReadMode.ReadSchema);
            }
 
            this.Add("开机时间", DateTime.Now);
            this.Add("关机时间", DateTime.Now);
            this.SaveToXml();
        }
 
        protected override void OnStop()
        {
            this.Update("关机时间", DateTime.Now);
            this.SaveToXml();
        }
 
        private void Timer_Click(Object sender,System.Timers.ElapsedEventArgs e)
        {
            this.Update("关机时间",DateTime.Now);
            this.SaveToXml();
        }
 
        private void CreateDataTable()
        {
            System.Data.DataTable Dt = new DataTable("OPENCLOSE");
            Dt.Columns.Add("TimeType", typeof(string));
            Dt.Columns.Add("OperTime", typeof(DateTime));
            _Ds.Tables.Add(Dt);
        }
 
 
        //添加开关机时间记录
        private bool Add(string TimeType, DateTime OperTime)
        {
            if (_Ds.Tables.Count == 0)
                return false;
            DataTable Dt = _Ds.Tables["OPENCLOSE"];
            if (Dt == null)
                return false;
            DataRow dr = Dt.NewRow();
            dr["TimeType"] = TimeType;
            dr["OperTime"] = OperTime;
 
            Dt.Rows.Add(dr);
            return true;
 
        }
 
 
        //更新关机时间
        private bool Update(string OperTime, DateTime UpdateTime)
        {
            if (_Ds.Tables.Count == 0)
                return false;
            DataTable Dt = _Ds.Tables["OPENCLOSE"];
            if (Dt == null)
                return false;
            DataRow Dr = Dt.Rows[Dt.Rows.Count - 1];
 
            Dr["TimeType"] = OperTime;
            Dr["OperTime"] = UpdateTime;
            return true;
        }
 
 
        //保存到xml文件
        private void SaveToXml()
        {
            if (_Ds == null)
                return;
            _Ds.WriteXml(_FilePath, XmlWriteMode.WriteSchema);
        }
    }
}

  服务安装脚本

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsServiceTest.exe
Net Start ServiceTest
sc config ServiceTest start= auto
pause

  服务卸载脚本

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceTest.exe
pause

  

posted @   yufenghou  阅读(239)  评论(0编辑  收藏  举报
编辑推荐:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示