如何控制window服务的启动时间和执行次数呢? 我的目的就是想设计一个服务,让它定时比如晚上0点启动执行删除文件的功能,那么如何设置定时功能,又如何让删除操作一天只执行一次呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 让service一直运行,保持一个timer就行了吧?一定要停止service吗? 就是要让service一直运行啊,那如何利用timer定时触发呢? 1、用C#创建一个Windows服务类型的项目Timer_Service2、打开Service1.cs的代码页3、把代码改成如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Diagnostics;using System.ServiceProcess;using System.Text;using System.Timers;namespace Timer_Service{ public partial class Service1 : ServiceBase { public System.Timers.Timer aTimer = new System.Timers.Timer(); public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { // TODO: 在此处添加代码以启动服务。 aTimer.Elapsed += new ElapsedEventHandler(OnTimer); aTimer.Interval = 1000 * 3600; //每小时 aTimer.Enabled = true; aTimer.Start(); } protected override void OnStop() { // TODO: 在此处添加代码以执行停止服务所需的关闭操作。 aTimer.Stop(); } public static void OnTimer(object state, ElapsedEventArgs e) { System.Timers.Timer aTimer = (System.Timers.Timer)state; aTimer.Stop(); //To do code here aTimer.Start(); } }}4.在OnTimer的todo里面加自己需要的操作 我在//To do code here 加了这么一句代码 FindAllFileAndDel(ConfigurationSettings.AppSettings["FileMonitorDirectory"]);FindAllFileAndDel具体代码如下: public void FindAllFileAndDel(string path) { DirectoryInfo[] ChildDirectory;//子目录集 FileInfo[] NewFileInfo;//当前所有文件 DirectoryInfo FatherDirectory = new DirectoryInfo(path); //当前目录 ChildDirectory = FatherDirectory.GetDirectories("*.*"); //得到子目录集 NewFileInfo = FatherDirectory.GetFiles();//得到文件集,可以进行操作 foreach (FileInfo fileinfo in FatherDirectory.GetFiles("*.*")) { //DateTime dt = Convert.ToDateTime("2007-12-31"); DateTime dt = DateTime.Now.Date; if (fileinfo.LastWriteTime.AddDays(90) < dt)//假如最后修改时间是90天之前则删除 //if(fileinfo.LastAccessTime.AddDays(90)<dt)//假如最后访问时间是90天之前则删除 { //fileinfo.Delete(); delcount = delcount + 1; } } foreach (DirectoryInfo dirInfo in ChildDirectory) { FindAllFileAndDel(dirInfo.FullName); } }但提示:非静态的字段、方法或属性 "空间名.类名.FindAllFileAndDel(string)"要求对象引用这是怎么回事呢? 好像没有OnTimer事件啊,要不要先在哪声明一下? public void FindAllFileAndDel(string path)改成public static void FindAllFileAndDel(string path)因为你不需要实例化Service1这个类,只需要静态的函数就可以了 在用 installutils DeleteFileBefore90DaysAgoService.exe 后,我在系统服务没有看到名为DeleteFileBefore90DaysAgoService的服务,倒是发现有一个.NET Runtime Optimization Service v2.0.50727_X86的服务,这个是不是就是刚才安装的服务呢?另外,.NET Runtime Optimization Service v2.0.50727_X86的这个服务默认是停止的,我手动启动后,没过多久就又自己停止了。请问这又是怎么回事呢? 用 installutils -i DeleteFileBefore90DaysAgoService.exe 安装,看看console输出的信息,又没有安装成功,你说的那个服务不是你安装出来的 原来右键点服务程序的设计界面,选择看来ontime()事件还是没有执行啊...我在onstart()和ontime两事件里分别加了一句写日志的语句。测试的结果只有onstart的语句有被执行。可能什么原因呢? 原来右键点服务程序的设计界面,选择 "添加安装程序" 。然后在cmd窗口里执行installutils DeleteFileBefore90DaysAgoService.exe 即成功安装了服务。不过看来ontime()事件还是没有执行啊...我在onstart()和ontime两事件里分别加了一句写日志的语句。测试的结果只有onstart的语句有被执行。可能什么原因呢? http://topic.csdn.net/u/20080218/11/88649ad6-c946-46f8-9546-926a9c583376.html 大家都帮我顶一下:http://topic.csdn.net/u/20080218/11/88649ad6-c946-46f8-9546-926a9c583376.html aTimer.Elapsed += new ElapsedEventHandler(OnTimer);这句话确保执行了么? Windows Service如何设置断点呢? C#键盘钩子为什么执行两次? msdn for vs2005有没有最新版 ? winfrom窗体的问题 怎么移除子控件而不销毁它 如何访问嵌入在工程内的文件? 谢谢!! silverlight中listbox和数据库的绑定? 请教 关于事务 webform 中的treeivew控件怎么没有SelectedNode 属性呢? 部署到IIS上的asp.net网站后台的json反序列化 C# datagridview 增删改一行后自动定位到下一行 请问:在程序结束时该怎样卸载之前隐藏的窗体。 Visual C# 中怎么才能把一个TextBox里的内容加到另外一个TextBox里面?
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Timers;namespace Timer_Service
{
public partial class Service1 : ServiceBase
{
public System.Timers.Timer aTimer = new System.Timers.Timer(); public Service1()
{
InitializeComponent();
} protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
aTimer.Elapsed += new ElapsedEventHandler(OnTimer);
aTimer.Interval = 1000 * 3600; //每小时
aTimer.Enabled = true;
aTimer.Start();
} protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
aTimer.Stop();
} public static void OnTimer(object state, ElapsedEventArgs e)
{
System.Timers.Timer aTimer = (System.Timers.Timer)state;
aTimer.Stop();
//To do code here aTimer.Start();
}
}
}
4.在OnTimer的todo里面加自己需要的操作
{
DirectoryInfo[] ChildDirectory;//子目录集
FileInfo[] NewFileInfo;//当前所有文件
DirectoryInfo FatherDirectory = new DirectoryInfo(path); //当前目录
ChildDirectory = FatherDirectory.GetDirectories("*.*"); //得到子目录集
NewFileInfo = FatherDirectory.GetFiles();//得到文件集,可以进行操作
foreach (FileInfo fileinfo in FatherDirectory.GetFiles("*.*"))
{
//DateTime dt = Convert.ToDateTime("2007-12-31");
DateTime dt = DateTime.Now.Date;
if (fileinfo.LastWriteTime.AddDays(90) < dt)//假如最后修改时间是90天之前则删除
//if(fileinfo.LastAccessTime.AddDays(90)<dt)//假如最后访问时间是90天之前则删除
{
//fileinfo.Delete();
delcount = delcount + 1;
}
}
foreach (DirectoryInfo dirInfo in ChildDirectory)
{
FindAllFileAndDel(dirInfo.FullName);
}
}但提示:非静态的字段、方法或属性 "空间名.类名.FindAllFileAndDel(string)"要求对象引用
这是怎么回事呢?
看来ontime()事件还是没有执行啊...我在onstart()和ontime两事件里分别加了一句写日志的语句。测试的结果只有onstart的语句有被执行。可能什么原因呢?
不过看来ontime()事件还是没有执行啊...我在onstart()和ontime两事件里分别加了一句写日志的语句。测试的结果只有onstart的语句有被执行。可能什么原因呢?
http://topic.csdn.net/u/20080218/11/88649ad6-c946-46f8-9546-926a9c583376.html
aTimer.Elapsed += new ElapsedEventHandler(OnTimer);这句话确保执行了么?