记录一个用C#实现的windows计时执行任务的服务

记录一个用C#实现的windows计时执行任务的服务

这个服务实现的功能是每天下午六点统计一次指定路径的文件夹大小

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

namespace ProjectSizeStatistics
{
    public partial class MyService1 : ServiceBase
    {
        public MyService1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            WriteInfo("服务启动");
            InitTimer();
        }
        int _checkHour = 18; //每天六点检测
        private string filePath = @"D:\FileSizeStatistic.txt";
        void InitTimer()
        {
            var timer = new System.Threading.Timer(TimerCallBack, null, 5000, 360000);      //一小时执行一次
        }
        void TimerCallBack(object pData)
        {
            DateTime now = DateTime.Now;
            var hour = now.Hour;
            if (hour == _checkHour)
            {
                SampleProjectSize();
            }
        }
        /// <summary>
        /// 采集项目大小
        /// </summary>
        void SampleProjectSize()
        {
            string path = @"D:\Projects\GitProject\ClientPro";
            long size = GetDirectorySize(path);
            int GB = (int)(size / 1024 / 1024 / 1024);
            float remainGb = size * 1.0f / 1024 / 1024 / 1024 - GB;
            WriteInfo($"{path}   文件大小为\"{size}\"字节\t{(GB + remainGb).ToString("f2")}G");
        }
        /// <summary>
        /// 获取文件夹的大小,返回字节数
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        long GetDirectorySize(string path)
        {
            long size = 0;
            DirectoryInfo dir = new DirectoryInfo(path);
            foreach (var item in dir.GetFiles())
            {
                size += item.Length;
            }
            foreach (var item in dir.GetDirectories())
            {
                size += GetDirectorySize(item.FullName);
            }
            return size;
        }
        private void WriteInfo(string info)
        {
            //using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate))
            //{
            //}
            using (StreamWriter writer = File.AppendText(filePath))
            {
                writer.WriteLine($"{DateTime.Now}\t{info}");
            }
        }

        protected override void OnStop()
        {
        }
    }
}

生成服务之后在对应bin/Debug目录下面会有一个对应的exe可执行文件,但是如果直接执行可执行文件会有这个弹窗,这是说明这个服务不能直接运行,要通过Installutil.exe去执行,

这里如果我们安装的VisualStudio的话,那么C盘的 C:\Windows\Microsoft.NET\Framework\v4.0.30319这个目录下面就会有InstallUtil.exe这个可执行文件,我们以管理员的身份运行命令提示符,之后进入到这个目录,执行这个命令

installutil.exe 你的服务exe的绝对路径

这样在windows服务中我们就能找到我们对应的服务了,启动它即可。

如果要卸载服务可执行以下命令

installutil.exe 你的服务exe的绝对路径  -u

小提示,我们每次修改我们的服务内容之后只需要重新生成服务项目,不需要重新安装服务,生成好之后,启动服务即可。

 文章来源地址https://uudwc.com/A/4PLOx

原文地址:https://blog.csdn.net/a1191835397/article/details/132413857

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年08月22日 09:05
使用Mavon-Editor编辑器上传本地图片到又拍云云存储(Vue+SpringBoot)
下一篇 2023年08月22日 09:06