我的目的就是想设计一个服务,让它定时比如晚上0点启动执行删除文件的功能,那么如何设置定时功能,又如何让删除操作一天只执行一次呢?

解决方案 »

  1.   

    让service一直运行,保持一个timer就行了吧?一定要停止service吗?
      

  2.   

    就是要让service一直运行啊,那如何利用timer定时触发呢?
      

  3.   

    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里面加自己需要的操作
      

  4.   

    我在//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)"要求对象引用
    这是怎么回事呢?
      

  5.   

    好像没有OnTimer事件啊,要不要先在哪声明一下?
      

  6.   

    public void FindAllFileAndDel(string path)改成public static void FindAllFileAndDel(string path)因为你不需要实例化Service1这个类,只需要静态的函数就可以了
      

  7.   

    在用 installutils DeleteFileBefore90DaysAgoService.exe 后,我在系统服务没有看到名为DeleteFileBefore90DaysAgoService的服务,倒是发现有一个.NET Runtime Optimization Service v2.0.50727_X86的服务,这个是不是就是刚才安装的服务呢?另外,.NET Runtime Optimization Service v2.0.50727_X86的这个服务默认是停止的,我手动启动后,没过多久就又自己停止了。请问这又是怎么回事呢?
      

  8.   

    用   installutils  -i DeleteFileBefore90DaysAgoService.exe 安装,看看console输出的信息,又没有安装成功,你说的那个服务不是你安装出来的
      

  9.   

    原来右键点服务程序的设计界面,选择
    看来ontime()事件还是没有执行啊...我在onstart()和ontime两事件里分别加了一句写日志的语句。测试的结果只有onstart的语句有被执行。可能什么原因呢?
      

  10.   

    原来右键点服务程序的设计界面,选择 "添加安装程序" 。然后在cmd窗口里执行installutils DeleteFileBefore90DaysAgoService.exe  即成功安装了服务。
    不过看来ontime()事件还是没有执行啊...我在onstart()和ontime两事件里分别加了一句写日志的语句。测试的结果只有onstart的语句有被执行。可能什么原因呢?
      

  11.   

    http://topic.csdn.net/u/20080218/11/88649ad6-c946-46f8-9546-926a9c583376.html
      

  12.   

    大家都帮我顶一下:
    http://topic.csdn.net/u/20080218/11/88649ad6-c946-46f8-9546-926a9c583376.html
      

  13.   


     aTimer.Elapsed += new ElapsedEventHandler(OnTimer);这句话确保执行了么?
      

  14.   

    Windows   Service如何设置断点呢?