当前位置: 首页 > news >正文

记录一个用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

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

 

http://www.lryc.cn/news/137743.html

相关文章:

  • “深入剖析JVM内部机制:了解Java虚拟机的工作原理“
  • golang远程开发调试设置vscode插件失败解决方法记录
  • 数据结构:二叉树及相关操作
  • 4.物联网LWIP之C/S编程,stm32作为服务器,stm32作为客户端,代码的优化
  • 【C语言】扫雷游戏(可展开)——超细教学
  • 数据的深海潜行:数据湖、数据仓库与数据湖库之间的微妙关系
  • Docker 安装 Redis集群
  • 数据结构入门 — 链表详解_单链表
  • 从零学算法151
  • 【Vue】动态设置元素类以及样式
  • node和前端项目宝塔部署
  • 【Python原创毕设|课设】基于Python Flask的上海美食信息与可视化宣传网站项目-文末附下载方式以及往届优秀论文,原创项目其他均为抄袭
  • 【HTML】HTML面试知识梳理
  • Java进阶篇--IO流的第二篇《多样的流》
  • iPhone 14 Pro 动态岛的功能和使用方法详解
  • 掌握这20条你将超过90%的测试员
  • LightDB create table时列约束支持enable/disable关键字
  • 使用BeeWare实现iOS调用Python
  • 无公网IP内网穿透使用vscode配置SSH远程ubuntu随时随地开发写代码
  • 二叉树、红黑树、B树、B+树
  • 12,【设计模式】工厂
  • mysql 8.0 窗口函数 之 分布函数 与 sql server (2017以后支持) 分布函数 一样
  • Python Opencv实践 - 图像直方图自适应均衡化
  • Linux编程:在程序中异步的调用其他程序
  • 04有监督算法——支持向量机
  • macos 使用vscode 开发python 爬虫(安装一)
  • 专有网络VPC私网/公网类产品选择
  • Connect-The-Dots靶场
  • Linux解决RocketMQ中NameServer启动问题
  • js逆向实战之某书protobuf反序列化