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

news2024/9/22 23:29:01

记录一个用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.coloradmin.cn/o/908830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日撸代码300行:第66-68天(主动学习之 ALEC)

代码来自闵老师”日撸 Java 三百行&#xff08;61-70天&#xff09; 日撸 Java 三百行&#xff08;61-70天&#xff0c;决策树与集成学习&#xff09;_闵帆的博客-CSDN博客 本次代码的实现是基于高斯密度&#xff0c;ALEC算法原文是基于密度峰值&#xff0c;同样是基于密度聚类…

HTTPS 握手过程

HTTPS 握手过程 HTTP 通信的缺点 通信使用明文&#xff0c;内容可能被窃听(重要密码泄露)不验证通信方身份&#xff0c;有可能遭遇伪装(跨站点请求伪造)无法证明报文的完整性&#xff0c;有可能已遭篡改(运营商劫持) HTTPS 握手过程 客户端发起 HTTPS 请求 用户在浏览器里…

Spring之ioc容器

目录 1.简介 2.为什么学习Spring 3.Spring的核心特性 4.Spring ioc 容器的特点 5.Spring的注入方式 6.web整合容器 1.简介&#xff1a; Spring简介 Spring是一个开源框架&#xff0c;它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。 Spring使用基本的J…

听GPT 讲Alertmanager源代码--notify

api/&#xff1a;这个目录包含了Alertmanager的API实现&#xff0c;包括v1和v2版本的API。 assets/&#xff1a;这个目录包含了静态资源文件&#xff0c;如HTML、JavaScript和CSS文件&#xff0c;它们用于构建Alertmanager的Web UI。 cmd/&#xff1a;这个目录包含了Alertmanag…

企业网三层架构实验

一、实验拓扑 二、实验要求 1、内网IP地址172.16.0.0/16合理分配&#xff1b; 2、SW1/2之间互为备份&#xff1b; 3、VRRP/STP/VLAN/TRUNK均使用&#xff1b; 4、所有PC通过DHCP获取IP地址&#xff1b; 三、实验思路 1、配置ISP的IP地址&#xff1b; 2、配置R1的IP地址&…

800V高压电驱动系统架构分析

需要电驱竞品样件请联&#xff1a;shbinzer &#xff08;拆车邦&#xff09; 过去一年是新能源汽车市场爆发的一年&#xff0c;据中汽协数据&#xff0c;2021年新能源汽车销售352万辆&#xff0c;同比大幅增长157.5%。新能源汽车技术发展迅速&#xff0c;畅销车辆在动力性能…

张驰课堂:揭秘学习6sigma黑带培训重要价值

随着全球经济一体化的加速推进&#xff0c;企业间的竞争日趋激烈&#xff0c;越来越多的企业意识到质量是企业的生命线&#xff0c;而提高质量的关键在于持续改进。在这个过程中&#xff0c;6sigma黑带作为具有专业技能和领导能力的人才&#xff0c;成为企业实现突破性改进、降…

PID输出PWM温度控制(详细介绍PID输出和PWM组合的各种方法)

这篇博客主要介绍PID的输出如何和PWM输出进行绑定,PID控制算法和源代码大家自行查看PID专栏,这里不再赘述。常用链接如下: 位置式PID(S7-200SMART 单自由度、双自由度梯形图源代码)_RXXW_Dor的博客-CSDN博客有关位置型PID和增量型PID的更多详细介绍请参看PID专栏的相关文章…

Wappalyzer - 技术剖析工具的必备浏览器扩展

目录 前言一、Wappalyzer简介1.Wappalyzer的背景和由来2.Wappalyzer的目标和优势 二、Wappalyzer的工作原理1.检测技术栈的方法和策略2.数据库和规则集的更新 三、如何使用Wappalyzer1.安装Wappalyzer浏览器扩展2.在浏览器中使用Wappalyzer进行技术剖析 总结 前言 在当今的数字…

云曦暑期学习第六周——kali

1.熟悉网络配置 一般来说虚拟机有三种网络模式&#xff1a; NAT (网络地址转换模式)Bridged (桥接模式)Host-Only&#xff08;主机模式&#xff09; nat模式&#xff1a; 虚拟系统会通过宿主机的网络来访问外网。而这里的宿主机相当于有两个网卡&#xff0c;一个是真实网卡…

redis--------哨兵模式

1.哨兵模式 试想一下&#xff0c;如果主从模式中&#xff0c;大半夜主节点挂了&#xff0c;运维从床上迷迷糊糊爬起来&#xff0c;打开电脑&#xff0c;手动升级处理&#xff0c;怕不是第二天就要上头条了。 哨兵模式的出现用于解决主从模式中无法自动升级主节点的问题&#xf…

javeee eclipse项目导入idea中

步骤一 复制项目到idea工作空间 步骤二 在idea中导入项目 步骤三 配置classes目录 步骤四 配置lib目录 步骤五 添加tomcat依赖 步骤六 添加artifacts 步骤七 部署到tomcat

软件开发bug问题跟踪与管理

一、Redmine 项目管理和缺陷跟踪工具 官网&#xff1a;https://www.redmine.org/ Redmine 是一个开源的、基于 Web 的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示&#xff0c;同时它又支持多项目管理。Redmine 是一个自由开源软件解决方案&#xff0c;…

【新版】系统架构设计师 - 系统测试与维护

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 系统测试与维护考点摘要软件测试软件测试 - 测试类型软件测试 - 静态测试软件测试 - 动态测试软件测试 - 测试阶段软件测试 - 测试阶段 - 单元测试软件测试 - 测试阶段 - 集成测试软件测试 - 测试…

我的创作纪念日(C++修仙练气期总结)

分享自己最喜欢的一首歌&#xff1a;空想フォレスト—伊東歌詞太郎 机缘 现在想想自己在CSDN创作的原因&#xff0c;一开始其实就是想着拿着博客当做自己的学习笔记&#xff0c;笔记嘛&#xff0c;随便写写&#xff0c;自己看得懂就ok了的态度凸(艹皿艹 )。也是用来作为自己学习…

2023年大数据与区块链国际会议 | EI、Scoups检索

会议简介 Brief Introduction 2023年大数据与区块链国际会议&#xff08;ICBDB 2023&#xff09; 会议时间&#xff1a;2023年11月17 -19日 召开地点&#xff1a;中国西安 大会官网&#xff1a;www.icobdb.org 2023年大数据与区块链国际会议&#xff08;ICBDB 2023&#xff09;…

基于swing的超市管理系统java仓库库存进销存jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于swing的超市管理系统 系统有3权限&#xff1a;管…

Nginx代理转发地址不正确问题

使用ngix前缀去代理转发一个地址&#xff0c;貌似成功了&#xff0c;但是进不到正确的页面&#xff0c;能够访问&#xff0c;但是一直404远处出来nginx会自动拼接地址在后面 后面才知道要将这段代码加上去&#xff0c;去除前缀转发

指针(一)【C语言进阶版】

大家好&#xff0c;我是深鱼~ 【前言】&#xff1a; 指针的主题&#xff0c;在初阶指针章节已经接触过了&#xff0c;我们知道了指针的概念&#xff1a; 1.指针就是个变量&#xff0c;用来存放地址&#xff0c;地址的唯一标识一块内存空间&#xff08;指针变量&#xff09;&a…