很多應用程序是需要7*24小時運行的,不知道那個傢伙不小心就把你要定時執行的程序關閉了,而且你是運行在右下角任務欄的,不注意根本就不知道被關閉。我有過這樣的經歷,寫了一個hqms接口程序,就是要定時推送病案數據的,在測試階段,數據要連續上傳十天才可以獲取正式環境的賬號,有同事竟然關了我的程序,並且沒有重啓,害我遲了幾天獲取正式賬號。
我的監控進程的程序很簡單,就是啓動程序的時候,只在任務管理器中的進程列表中看到程序,不在任務欄上顯示,代碼如下:
this.WindowState = FormWindowState.Normal;
this.WindowState = FormWindowState.Minimized;
this.ShowInTaskbar = false;
使用定時器,及時查看要監控的程序,如下代碼所示:
private bool isRunning = false;
private void timer1_Tick(object sender, EventArgs e)
{
if (isRunning) return;
isRunning = true;
Process[] ps = Process.GetProcessesByName(executeName);
if (ps.Length > 1)
{
int count = ps.Length;
foreach (Process p in ps)
{
count--;
p.Kill();
if (count == 1) break;
}
}
else if (ps.Length == 0)
{
Process.Start(executeName + ".exe");
WriteLogs("啓動" + executeName + ".exe");
}
isRunning = false;
}
監控的進程要寫在配置文件裏面,如下所示:
<?xml version="1.0" encoding="GB2312"?>
<Items>
<ExecuteName>HqmsJob</ExecuteName>
</Items>
在啓動監控程序的時候,就讀出要監控的進程,然後定時器會定時讀取進程的執行情況,如果出現兩個的時候就會自動關閉一個,假如沒有開啓的時候,就啓動,如下所示:
Process.Start(executeName + ".exe");