c#一个定时重启的小程序实现代码

2016-02-19 09:41 115 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享c#一个定时重启的小程序实现代码,希望可以对大家能有小小的帮助。

【 tulaoshi.com - 编程语言 】

原理我像大家都很清楚,这里只说.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 Dictionarystring, bool cache =
new Dictionarystring, bool();

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();
}

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

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

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

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

/// summary
/// 数据库列表
/// /summary
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;
}
}
}

当前1/2页 12下一页

来源:https://www.tulaoshi.com/n/20160219/1591736.html

延伸阅读
//保存文件的路径,包括文件名 private string GetSavePath(string FileName) { string path=Request.PhysicalApplicationPath +"\\Link_Icon"; return path+"\\"+FileName; } private bool UpLoad()//上传图片 { bool flag=false; string FileName=GetFileName(fileIcon.Value ); string db=Request.PhysicalApplicationP...
using System;  using System.Data;  using System.Configuration;  using System.Collections;  using System.Web;  using System.Web.Security;  using System.Web.UI;  using System.Web.UI.WebControls;  using System.Web.UI.WebControls.W...
源文件内容: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace wzy2 {  /// <summary  /// Form1 的摘要说明。  /// </summary  public class Form1 : System.Windows.Forms.Form  {   private...
ScreenSaver.cs using System;using System.Windows.Forms; namespace ScreenSaver{ public class DotNETScreenSaver { [STAThread] static void Main(string[] args) { if (args.Length > 0) { if (args[0].ToLower().Trim().Substring(0,2) == "/c") { MessageBox.Show("This Screen Saver has no options you can set."...
如果叫你实现远程启动别人的计算机,你首先想到的可能是先做一个在远程计算机上面运行客户端程序,然后在本地计算机上面再做一个服务器端程序,通过这二个程序直接的通讯实现重启远程计算机。这当然是一个方法。但这未免有点麻烦。如果现在只告诉你远程计算机的管理者的登陆帐号,而并不允许你在远程的计算机上面运行一个所谓的客户端程序,让你...

经验教程

903

收藏

59
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部