每天要在企业微信上写日报就添加了一个机器人定时提醒写日报,因此做了一个本地的服务。
一、创建企业微信机器人
在群里边的右上 ··· 点击添加机器人
上边的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就可以使用了