如何开发一个运行在windows系统服务器上的服务

第一步:vs2022创建一个windows服务项目

第二步:从工具箱拖拽出一个timer

第三步:按下图所示进入,开始编辑业务逻辑

下面给个例子

cs 复制代码
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.Threading.Tasks;
using System.Timers;

namespace FlyBookDataProject
{
    public partial class Service1 : ServiceBase
    {
        private Timer timer;

        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            timer = new Timer(60000); // 60秒间隔
            timer.Elapsed += OnTimedEvent;
            timer.AutoReset = true; // 设置为true表示定时器在触发后会自动重置并重新开始计时
            timer.Enabled = true; // 启动定时器
        }

        protected override void OnStop()
        {
            timer.Stop();
            timer.Elapsed -= OnTimedEvent;
            timer.Dispose();
        }
        private async void OnTimedEvent(Object source, ElapsedEventArgs e)
        {
            // 执行你的任务
            DateTime now = DateTime.Now;
            if (now.Hour == 8 && now.Minute == 42)
            {
                writeTxtCls log = new writeTxtCls();
                log.writeTxtToFile("\r\n[" + System.DateTime.Now.ToString() + "]:开始执行任务");
                List<userinfo> list = new List<userinfo>();
                string sql = "select * from vw_QianDaoUserList_base";
                dynamic dt = Public.DB.SqlQueryable<dynamic>(sql).ToList();
                foreach (var item in dt)
                {
                    userinfo userinfo = new userinfo();
                    userinfo.id = item.UserId;
                    userinfo.ifqiandao = false;
                    userinfo.dzcount = 0;
                    userinfo.wrong1count = 0;
                    userinfo.wrong2count = 0;
                    userinfo.flag = 1;
                    list.Add(userinfo);
                }
                int i = 1;
                while (true)
                {
                    foreach (var ss in list)
                    {
                        int goon = 1;
                        if (!ss.ifqiandao && ss.wrong1count < 2)
                        {
                            int asd = Public.DoWork(ss.id);
                            if (asd == 1)
                            {
                                ss.ifqiandao = true;
                            }
                            else
                            {
                                ss.wrong1count++;
                            }
                        }
                        else
                        {
                            goon++;
                        }
                        if (ss.dzcount < 5 && ss.wrong2count < 6)
                        {
                            int asd = Public.DoWork1(ss.id);
                            if (asd == 1)
                            {
                                ss.dzcount++;
                            }
                            else
                            {
                                ss.wrong2count++;
                            }
                        }
                        else
                        {
                            goon++;
                        }
                        if (goon == 3)
                        {
                            ss.flag = 2;
                        }
                    }
                    list.RemoveAll(it => it.flag == 2);
                    if (list.Count == 0)
                    {
                        log.writeTxtToFile("\r\n[" + System.DateTime.Now.ToString() + "]:任务执行完成");
                        break;
                    }
                    log.writeTxtToFile("\r\n[" + System.DateTime.Now.ToString() + "]:执行第" + i + "次,当前状态:" + JsonConvert.SerializeObject(list));
                    i++;
                    await Task.Delay(60000);
                }
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {

        }
    }
}

第四步:将程序复制到服务器上,并注册成服务

1、项目重新生成,在项目的bin/Debug下,如果生成了exe文件,比如 MyTimerService.exe

2、在服务器D盘下创建一个文件夹名为MyTimerService

3、将bin/Debug下的所有文件复制到D:/MyTimerService

4、将两个bat文件复制到C盘下,以管理员身份运行setup.bat

setup

cs 复制代码
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
installutil /u D:\MyTimerService\MyTimerService.exe
pause

unsetup

cs 复制代码
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
installutil D:\MyTimerService\MyTimerService.exe
pause
相关推荐
weixin_4462608544 分钟前
轻松实现浏览器自动化——AI浏览器自动化框架Stagehand
运维·人工智能·自动化
ZPC82102 小时前
参数服务器 server and client
服务器·qt
EasyGBS2 小时前
20250808:EasyGBS 对接大华 ICC 平台问题处理
服务器·音视频·技术分享
搬码临时工2 小时前
自己本地搭建的服务器怎么接公网?公网IP直连服务器方法,和只有内网IP直接映射到互联网
服务器·网络·tcp/ip
AI云原生3 小时前
2025最新国内服务器可用docker源仓库地址大全(2025年8月更新)
运维·服务器·docker·云原生·容器·kubernetes·serverless
Clownseven3 小时前
Nginx反向代理教程:配置多个网站并一键开启HTTPS (Certbot)
运维·nginx·https
要记得喝水4 小时前
汇编中常用寄存器介绍
开发语言·汇编·windows·c#·.net
火龙kess4 小时前
Centos-Stream 10 安装教程(2025版图文教程)
linux·运维·centos
涛思数据(TDengine)6 小时前
新客户 | TDengine 时序数据库是怎么在钢厂“撬动”PI 的?
大数据·运维·数据库·时序数据库·tdengine