当前位置:  编程技术>.net/c#/asp.net

c#一个定时重启的小程序实现代码第1/2页

    来源: 互联网  发布时间:2014-10-13

    本文导语:  原理我像大家都很清楚,这里只说.NET(c#实现)。服务器每次启动或者重启,都是没登陆的。那意味着启动项里不只能做,我就考虑到使用Windows服务。Windows服务在系统加载时候就会启动所有服务,把程序写进里面应该没错了...

原理我像大家都很清楚,这里只说.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的代码端,将后会发布。
代码如下:

private readonly Dictionary cache =
new Dictionary();

private readonly IniFile ini = new IniFile(SysUtil.GetMapPath("Task.ini"));
private bool _flag;
private string day;
private string fHour;
private string fWeek;
private string hour;
private Thread timeThread;


protected override void OnStart(string[] args)
{
Go();
}

protected override void OnStop()
{
StopThread();
}

///
/// 执行
///
public void Go()
{
day = DateTime.Now.ToString("yyyy-MM-dd");
fWeek = ini.IniReadValue("Task", "Week");
fHour = ini.IniReadValue("Task", "Hour");
RunThread();
}

///
/// 执行线程
///
private void RunThread()
{
//这里开始线程
_flag = true;
timeThread = new Thread(ThreadTimer);
timeThread.Start();
}

///
/// 停止线程
///
private void StopThread()
{
_flag = false;
if (timeThread != null) timeThread.Abort();
}

///
/// 线程方法
///
public void ThreadTimer()
{
while (_flag)
{
if (fWeek == "") //按天
{
RunBackup();
}
else
{
// 按周
if (WeekSwitch(fWeek) == DateUtil.getWeek(DateTime.Now) && WeekSwitch(fWeek) != "")
{
RunBackup();
}
}
}
}

///
/// 数据库列表
///
private DataTable GetTaskList()
{
DataSet ds = new DataSet();
ds.ReadXml(SysUtil.GetMapPath("Db.xml"));
return ds.Tables["DataSet"];
}

private void RunBackup()
{
if (!File.Exists(SysUtil.GetMapPath("Db.xml"))) return;

day = DateTime.Now.ToString("yyyy-MM-dd");

hour = DateTime.Now.ToString("HH");
if (hour.Equals(fHour))
{
if (!cache.ContainsKey(day)) cache.Add(day, false);

if (fWeek != "" && cache[day] == false)
{
if (WeekSwitch(fWeek) == DateUtil.getWeek(DateTime.Parse(day)))
{
StartWork();
cache[day] = true;
}
}
else
{
if (cache[day] == false)
{
StartWork();
cache[day] = true;
}
}
}


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux 重启与重启网络的区别
  • Linux下怎样配置,让apache及其httpd服务,在机器重启后也重启
  • 改了/etc/fstab文件,重启之后就提示file system readonly,无法重启.
  • linux命令行下用ctrl+alt+del重启计算机是否是正确的重启方法?
  • 一个腾讯面试题,如何设计服务进程,让业务进程重启后,服务进程可以自动继续重启前的服务?
  • 修改/etc/fstab之后,必须重启系统吗?
  • 怎样编程重启系统?
  • ubuntu visodu增加apache用户权限后用重启系统吗
  • 有没有什么指令可以查看谁重启机器了
  • 为何LINUX服务器下的NAT重启后老是失效?急!!!
  • 请问vnc下远程重启的问题。。。
  • linux命令如何实现重启父进程而不会使其子进程退出
  • 请问下如何重启文件系统
  • 通过线程 如可监控tomcat是否正常 重启tomcat
  • linux重启后无法通过ssh连接
  • 如何重启apache服务
  • 如何在solaris系统下,重启SNMP服务。
  • CentOS 5.4每次开机检查磁盘,然后不停重启
  • 软硬件速度不匹配时,有没有可能引起重启?
  • 求教:Linux下Java应用程序的重启脚本


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3