VS2019创建Windows服务

        每天要在企业微信上写日报就添加了一个机器人定时提醒写日报,因此做了一个本地的服务。

一、创建企业微信机器人

        在群里边的右上 ··· 点击添加机器人

 

         上边的Webhook地址会在下边 三步骤 用到

二、创建项目

1.VS创建新项目Windows服务

 2.在Service1[设计]界面上右键添加安装程序

 出现如下图控件

 点击serviceInstaller1,在属性面板上设置服务的启动模式及服务列表中显示的服务名称

点击serviceProcessInstaller1,在属性面板设置服务类型为本地模式

 

 OK,创建项目完成,剩下的就是搬砖啦

 三、编写代码

1. Program.cs中Main方法是整个程序的起点,并且可以调用多个服务程序,这里自由发挥,我们当前写的程序不做扩展

 2.日报服务,在服务代码中,OnStart和OnStop只会执行一次,分别在开始和停止的时候。除此之外还有OnContinue,OnPause等等,详细请在ServiceBase处按F12,从元数据。

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

namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            try
            {
                WriteLog("服务启动");
                ToDoSomeThings();

            }
            catch (Exception ex)
            {
                WriteLog(ex.Message);
                ServiceController serviceController = new ServiceController();
                if (serviceController.CanStop)
                {
                    serviceController.Stop();
                }
            }
        }

        protected override void OnStop()
        {
            try
            {
                this.WriteLog("服务结束");
            }
            catch (Exception ex)
            {
                this.WriteLog(ex.Message);
                ServiceController serviceController = new ServiceController();
                if (serviceController.CanStop)
                {
                    serviceController.Stop();
                }
            }

        }

        /// <summary>
        /// 记录日志
        /// </summary>
        /// <param name="LogContent"></param>
        private void WriteLog(string LogContent)
        {
            string FilePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\Log.txt";
            FileStream fileStream = null;
            if (File.Exists(FilePath))
            {
                fileStream = new FileStream(FilePath, FileMode.Append);
            }
            else
            {
                fileStream = new FileStream(FilePath, FileMode.OpenOrCreate);
            }
            StreamWriter streamWriter = new StreamWriter(fileStream);
            streamWriter.WriteLine(DateTime.Now + System.Environment.NewLine + LogContent);

            streamWriter.Close();
            fileStream.Close();
            GC.Collect();
        }

        private void ToDoSomeThings()
        {
            System.Timers.Timer aTimer = new System.Timers.Timer();
            aTimer.Elapsed += new System.Timers.ElapsedEventHandler(aTimer_Elapsed);
            // 设置引发时间的时间间隔 此处设置为1秒
            aTimer.Interval = 1000;
            aTimer.Enabled = true;

        }

        private void aTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            // 得到 hour minute second  如果等于某个值就开始执行
            int intHour = e.SignalTime.Hour;
            int intMinute = e.SignalTime.Minute;
            int intSecond = e.SignalTime.Second;
            // 定制时间,在00:00:00 的时候执行
            int iHour = 18;
            int iMinute = 50;
            int iSecond = 00;
            // 设置 每天的00:00:00开始执行程序
            if (intHour == iHour && intMinute == iMinute && intSecond == iSecond)
            {
                //调用你要更新的方法
                WriteLog("执行日报功能");
                Send();
            }
        }

        private void Send()
        {
            //企业微信机器人的请求的Webhook地址
            string url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxx";
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
            Encoding encoding = Encoding.UTF8;
            string param = "{ \"msgtype\": \"text\", \"text\": { \"content\": \"写 日报 日报 日报 日报!!!!\" } }";
            byte[] bs = Encoding.UTF8.GetBytes(param);
            string responseData = String.Empty;
            req.Method = "POST";
            req.ContentType = "application/json";
            req.ContentLength = bs.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(bs, 0, bs.Length);
                reqStream.Close();
            }
            using (HttpWebResponse response = (HttpWebResponse)req.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
                {
                    responseData = reader.ReadToEnd().ToString();
                }
                Console.WriteLine(responseData);
            }
        }
    }
}

3.生成项目后就可以部署服务器了

四、部署本地服务

1.找到生成的项目文件夹

2.复制一个InstallUtil.exe到文件夹中

 

3.文件夹中新建记事本并编辑

cd /d "%~dp0"
InstallUtil.exe WindowsService1.exe
net start ReportService
cmd

 ​​​​​​​

 

 

4.将新建的记事本重命名为install.bat,用于安装服务

5.新建记事本并重命名为uninstall.bat, 用于卸载服务

cd /d "%~dp0"
InstallUtil.exe /u WindowsService1.exe
cmd

 6.以管理员身份运行install.bat,就会安装服务,可以再服务列表中找到,服务名称为刚才二步骤中命名的服务名称ReportService

 

 五.VS调试

 VS中调试附加进程

 

附加即可调式 

六、开发调试完成后

1.以管理员身份执行uninstall.bat将调试服务卸载

2.可把生成的项目文件夹整体复制到自己想放的地方,然后再以管理员身份执行install.bat就可以使用了

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值