作者:心窝子难受呢 | 来源:互联网 | 2023-09-10 19:27
一、需求使用windowsservice创建一个定时任务,定时执行数据处理任务,并记录日志,发送邮件。 二、实现1、打开VS新建一个windowsService程序,我命名为Tim
一、需求
使用windows service 创建一个定时任务,定时执行数据处理任务,并记录日志,发送邮件。
二、实现
1、打开VS新建一个windows Service程序,我命名为TimerService
注意:.NET Framwork框架的选择要与你电脑上的框架一致,我这里选择的是4.7.2
2、在Service1设计器中右击空白处选择查看代码
3.在Service1.cs中设定
Onstart方法定义定时器的开始执行,执行的时间间隔,以及时间间隔达到后所要执行的方法。
执行了一个文件写入任务,代码如下:
using System;
using System.IO;
using System.Net.Mail;
using System.ServiceProcess;
using System.Timers;
using Outlook = Microsoft.Office.Interop.Outlook;
namespace TimerService
{
public partial class Service1 : ServiceBase
{
private Timer timer;
public Service1()
{
InitializeComponent();
}
///
/// Start Service
///
///
protected override void OnStart(string[] args)
{
timer = new Timer(60 * 1000);
timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
timer.Start();
WriteLog("Service Start." + " " + DateTime.Now.ToString());
}
///
/// Stop Service
///
protected override void OnStop()
{
WriteLog("Service Stop." + " " + DateTime.Now.ToString());
timer.Stop();
timer.Dispose();
}
///
/// Execute Service
///
///
///
protected void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
WriteLog("Service Execute……" + " " + DateTime.Now.ToString());
var res = Send();
WriteLog(res);
}
///
/// Write Log
///
///
protected void WriteLog(string str)
{
string filePath = AppDomain.CurrentDomain.BaseDirectory + "Log.txt";
StreamWriter sw = null;
if (!File.Exists(filePath))
{
sw = File.CreateText(filePath);
}
else
{
sw = File.AppendText(filePath);
}
sw.Write(str + Environment.NewLine);
sw.Close();
}
///
///
///
///
public string Send()
{
try
{
SmtpClient client = new SmtpClient("smtp.wdc.com", 25);
client.UseDefaultCredentials = true;
MailAddress from = new MailAddress("huichun.wang@wdc.com");
MailAddress to = new MailAddress("huichun.wang@wdc.com");
MailAddress cc = new MailAddress("huichun.wang@wdc.com");
MailMessage message = new MailMessage();
message.From = from;
message.To.Add(to);
message.CC.Add(cc);
//message.Attachments.Add(new Attachment("test.txt"));
message.Body = "大家好,blablablabla邮件正文";
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = "邮件标题";
message.SubjectEncoding = System.Text.Encoding.UTF8;
client.Send(message);
message.Dispose();
message = null;
client.Dispose();
client = null;
return "发送正常";
}
catch (Exception e)
{
return "异常:" + e.Message;
}
}
}
}
4、在Service1设计器中右击空白处,选择添加安装程序,会添加一个ProjectInstaller设计器
5、在ProjectInstaller设计器中选择serviceProcessInstaller,右击查看属性,将Account的值改为LocalSystem
6、在ProjectInstaller设计器中选择serviceInstaller1,右击查看属性,ServiceName就是服务中显示的名称,将其命名TimerService
7、右击解决方案,点击生成解决方案
三、安装
1、打开刚刚新建项目所在的文件夹,找到bin文件下面的debug文件夹,比如:C:\Users\Administrator\Source\Repos\TimerService\bin\debug,里面有个TimerService.exe应用程序,就是我们所要执行的项目
2、打开文件夹C:\Windows\Microsoft.NET\Framework\v4.0.30319,可以看到里面有一个InstallUtil.exe的应用程序,这就是我们要的安装工具,这里的Framework的版本与我们项目的Framework版本保持一致
3、打开cmd输入cd C:\Users\Administrator\Source\Repos\TimerService\bin\Debug指令,
然后再输入C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe /i TimerService.exe,即可完成安装。
PS:需要注意,cmd需要以管理员身份运行,否则可能出现安装失败的情况(提示权限不足,如下图2)
安装失败提示:
4、启动任务管理器,点击服务,找到名称TemrService的服务,右击启动,即可将创建的定时服务启动,这里的服务名称就是我们在项目的serviceInstaller1的属性里面设置的serviceName
5、在我们的C:\Users\Administrator\Source\Repos\TimerService\bin\Debug文件下面会发现多了一个log.txt的文件,就是我们在项目中创建的日志文件,打开即可看到项目正常执行。
四、卸载
卸载服务需要在cmd中输入以下指令即可
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\installutil.exe /u TimerService.exe
参考原文链接:https://blog.csdn.net/qingyou2006/article/details/126464305