实例:
1
.
2.将service1改名为myservice1,右键查看代码或者按f7(或者双击后点击“切换到代码视图”)
页面中有两个内置方法,分别代表着启动和停止服务,可以将自己的逻辑代码放到此方法中执行
protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
}
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
}
先更新引用
using System;
using System.Collections.Generic;
using System.Data;//连接db时需datatble对象来接受
using System.Net;
using System.Net.Mail;//发送邮件
using System.ServiceProcess;
using System.Configuration;
using System.IO;//读取文件
再定义全局计时器对象和盘符路径
string filePath = @"E:\MyServiceLog.txt";//找e盘txt文件(这边路径自己指定)
System.Timers.Timer timeOA;//定义计时器对象
注意:盘符路径用于记录操作日志
在Onstatr方法中先执行下面语句,用来记录服务是否启动成功(下面统称为启动方法)
using (FileStream stream = new FileStream(filePath, FileMode.Append))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine($"{DateTime.Now},服务启动!");//安装服务后再txt文件中增加日志信息
}
这边有关于using方面的使用介绍
然后可以做一个定时器的功能,当多少时间过后执行某个方法
所以在启动方法中继续写上下面的代码
try
{
timeOA = new System.Timers.Timer(300000);//启动服务五分钟后执行此方法(毫秒为单位,六万毫秒等于一分钟)
timeOA.Elapsed += new System.Timers.ElapsedEventHandler(timerOA_Elapsed);//执行方法
timeOA.Enabled = true;
}
catch (Exception e)
{
//失败的话向管理员发送邮件,通知相关错误信息
string to = "**@qq.com";//写上自己的邮箱地址,用来接收错误反馈
sendmail(to, e.Message);//自定义的发送邮件方法,下面会写
using (FileStream stream = new FileStream(filePath, FileMode.Append))
using (StreamWriter writer = new StreamWriter(stream))
{
//程序失败后也会在指定的txt中存放日志报告
writer.WriteLine($"{DateTime.Now},程序错误!!!:"+e.Message+",已邮件通知相关人员");
}
}
注意:timerOA_Elapsed是方法名,会在下面写
这边附加dbherper方法连接:
然后我们创建timerOA_Elapsed方法
private void timerOA_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//获取当前小时
int intHour = e.SignalTime.Hour;
//获取当前分钟
int intMinute = e.SignalTime.Minute;
//如果时间为凌晨12.30,执行代码
if (intHour == 00 && intMinute == 30)
{
//里面就可以写你自己的逻辑啦
// 这个程序呢就会在每天的0:30进入到里面
}
}
然后是定义发送邮件的方法
这边sendmail中的参数我只传了收件人和主题,如需其他你们可以自定义
public void sendmail(string to, string subject)
{
using (FileStream stream = new FileStream(filePath, FileMode.Append))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine($"{DateTime.Now},进入发邮件的方法");//安装服务后再txt文件中增加日志信息
}
string user = "邮箱账号";
string passw = "邮箱密码";//密码
string Suffix = ""; //邮箱后缀
int port = 587; //端口号
string smtp = "smtp..net";
Suffix = user.Substring(user.IndexOf('@'));
//相应的邮箱后缀对应相应的smtp
else if (Suffix == "@qq.com")
{
smtp = "smtp.qq.com";
}
else if (Suffix == "@sh-teru.com")
{
smtp = "smtp.exmail.qq.com";
}
//实例化一个发送邮件类。
System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
//发件人邮箱地址,方法重载不同,可以根据需求自行选择。
mailMessage.From = new MailAddress(user);
//收件人邮箱地址。
//这边如果有多个收件人
//循环插入
if (to.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Length > 1)
{
foreach (var address in to.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
{
mailMessage.To.Add(address);
}
}
else
{
mailMessage.To.Add(new MailAddress(to));
}
//邮件标题。
mailMessage.Subject = subject;
//邮件内容
mailMessage.Body = "";
//实例化一个SmtpClient类。
SmtpClient client = new SmtpClient();
//服务器端口
client.Port = port;
//勤达邮箱服务器
client.Host = smtp;
//使用安全加密连接。
client.EnableSsl = true;
//不和请求一块发送。
client.UseDefaultCredentials = false;
//验证发件人身份(发件人的邮箱,邮箱里的生成授权码);
client.Credentials = new NetworkCredential(user, passw);
try
{
client.Send(mailMessage);
mailMessage.Dispose();
}
catch (Exception)
{
mailMessage.Dispose();
}
}
停止服务的时候我们也可以做下日志记录
protected override void OnStop()
{
using (FileStream stream = new FileStream(filePath, FileMode.Append))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine($"{DateTime.Now},服务停止!");
}
this.timeOA.Enabled = false;
}
然后右键点击添加安装程序
此时会出现两个组建,点击serviceProcessInstaller1,在右下角的属性栏中,将Account修改为LocalSystem
点击第二个组建,
Description表示服务的描述,DisplayName表示服务显示名称。ServicesDependedOn表示依赖的服务项。StartType表示启动类型,分为自动启动,手动启动和禁用,这边改成Automatic
4.直接运行
当运行时会报错
这个不用管,右键点击解决方案,生成
然后在项目所在目录的bin文件夹中的debug中可以看到生成的exe文件。
安装服务
然后以管理员身份运行cmd
第一种方法,
sc create huxinyu binPath= "E:\file\YL\windows服务 \WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe"
注意:标绿色部分是你项目的本地路径,
第二种方法
输入:
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
(我这边是64位的操作系统,如果是32位,请自行改动)
这句命令的目的就是找到c盘的installutil.exe的文件位置,如下图
输入InstallUtil.exe E:\file\YL\windows服务 \WindowsService1\WindowsService1\bin\Debug\WindowsService1.exe
刚创建的服务需要手动开启:打开服务,找到你生成的服务名称,右键开启即可
卸载服务
直接以管理员身份运行cmd
输入 sc delete 服务名即可
启动服务后就可以在本地txt的文件夹看到日志啦