承接上篇,导出功能如果文件长时间不处理,就会冗余拖慢系统,所以写了个服务定时去删除服务器文件,直接上代码
目录
1.创建C# Windows服务
1.1创建一个服务
用vs创建一个新的服务,并进行命名,如下列图 创建完成后,目录格式是这样的
咱第一小步就完事了
1.2配置服务参数
右键-添加安装程序然后会有两个文件,分别设置这两个文件的属性,看图
这样基本配置就完成了,下面就是进行逻辑代码编写
1.3编写逻辑代码
双击services,跳转到代码界面
首先NEW一个定时器timer作为定时依据
System.Timers.Timer Timer;
在启动方法里 初始化timer参数
protected override void OnStart(string[] args)
{
Timer = new System.Timers.Timer();
Timer.Interval = 1000 * 60 ; // 1分钟
Timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
Timer.Enabled = true;
}
Interval单位为毫秒,需要自己计算,例如每24小时执行一次就是 1000*60*60*24
Enabled 为是否引发Elapsed 里面的事件,这个事件就是自定义的Timer_Elapsed
在停止方法里,停掉timer的触发
protected override void OnStop()
{
Timer.Enabled = false;
}
然后就是自己建立一个触发的事件
private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//这里面执行你要进行的操作,例如增删改查等等。。
DeleteExcel();//这个方法是我自己定义的
}
//下面是逻辑删除代码,理论上,你可以直接复制就能运行,需要修改你的路径
public void DeleteExcel()
{
DirectoryInfo dir = new DirectoryInfo("你的路径,需实体路径");
FileInfo[] files = dir.GetFiles();
if (files.Length > 0)
{
WriteLog("准备执行删除文件!!");
foreach (FileInfo item in files)
{
if (item.CreationTime < DateTime.Now)
{
item.Delete();
WriteLog("删除文件:" + item.Name);
}
}
WriteLog("本次删除文件已执行完毕!!");
}
}
public void WriteLog(string msg)
{
//这个路径,是会自动寻找到你当前服务所在路径
string filePath = AppDomain.CurrentDomain.BaseDirectory + "Log";
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
string logPath = AppDomain.CurrentDomain.BaseDirectory + "Log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
try
{
using (StreamWriter sw = File.AppendText(logPath))
{
sw.WriteLine("消息:" + msg);
sw.WriteLine("时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sw.WriteLine("**************************************************");
sw.WriteLine();
sw.Flush();
sw.Close();
sw.Dispose();
}
}
catch (IOException e)
{
using (StreamWriter sw = File.AppendText(logPath))
{
sw.WriteLine("异常:" + e.Message);
sw.WriteLine("时间:" + DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"));
sw.WriteLine("**************************************************");
sw.WriteLine();
sw.Flush();
sw.Close();
sw.Dispose();
}
}
}
整合起来,一个简单定时删除的代码就完成了,如图
准备工作ok了,然后就要进行部署服务了
2.部署写好的windows服务
2.1使用cmd
4.0:cd C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
2.0:cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
2.2使用安装命令
安装:
InstallUtil E:\LearningWork\.NET\DeleteTest\Demo.exe
卸载:
InstallUtil /u E:\LearningWork\.NET\DeleteTest\Demo.exe
3.调试Windows服务
调试你的服务前提,是你的服务必须得正确部署在本地服务上,并且成功运行才可以
3.1服务部署好后,开启服务
3.2 利用vs断点调试
进入vs,选择调试-附加到进程
找到你部署的服务项目名称
点击附加,等待就进入了调试程序,在你的方法体或者方法入口打上断点,等待服务到你的触发时间,则会自动进入断点调试,剩下的就和平常一样。
注意,每次修改服务代码后,必须重新生成-卸载已有服务-重新安装服务 这个流程来,不然会进不到断点,而且服务也不会更新
到这里一个比较简单的服务从创建到部署到调试就完成了,当然后面还有有更复杂的逻辑,还会涉及到线程之类,还是需要多钻研多学习!