代码改变世界

一个定时重启的小程序

2008-09-19 22:15  John Wu  阅读(4264)  评论(8编辑  收藏  举报

今天有个朋友找我问有没有一些能像Windows一样计划任务重启的软件,我也不清楚。他它说能让我做一个给他它么?我考虑了一下,他的服务器都是有安装.NET框架的,那可以用.NET来使下~~!

原理我像大家都很清楚,这里只说.NET(c#实现)。服务器每次启动或者重启,都是没登陆的。那意味着启动项里不只能做,我就考虑到使用Windows服务。Windows服务在系统加载时候就会启动所有服务,把程序写进里面应该没错了。
需要重启,那就要一个时间来效验,写法都有很多。我这里采用ini来存放。

Time 记录要重启的时间,验证时间。
Day 用来累加天数。

 

[Reboot]
Time
=02:02:01
Day
=3



使用System.Timers.Timer循环验证时间(不知道始终对占用资源是否会太大)

 

        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            
if (DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"== retime)
            {
                Shoutdown.DoExitWin(
0x00000002);
            }
        }


服务首次启动初始化重启的时间以及天数,初始化时候读取ini文件,把时间放进变量里,将天数累加3天。(减少读写I/O的开销)
始终不停的循环验证。

 

 protected override void OnStart(string[] args)
  {
            ini 
= new IniFile(AppDomain.CurrentDomain.BaseDirectory + "Current.ini");
            time 
= ini.IniReadValue("Reboot""Time");
            day 
= ini.IniReadValue("Reboot""Day");

            retime 
= DateTime.Now.AddDays(double.Parse(day)).ToString("yyyy-MM-dd "+ time;

            autoTimer.AutoReset 
= true;
            autoTimer.Enabled 
= true;
            autoTimer.Elapsed 
+= Timer_Elapsed;
            autoTimer.Start();
  }


这里可以改造成用线程来做,我想应该比这个会好。

放出一段自动备份SQLSERVER的代码端,将后会发布。

Code


到这里基本的任务已经完成,代码没有适当的优化。还有一个不完善的GUI管理工具。

Reboot

(小弟重建博客的第一次发表文章,有望高手指点以及留下您的批评。)