您的位置:首页 > 编程语言 > C#

C# 双保险进程监视器 lol 保证被监视的程序"几乎"永远运行. 关键字:进程操作 进程查看 创建进程

2010-08-31 17:32 645 查看
假设现在有个程序 我希望它一直运行着 几年几十年不去管它。 可是有时候windows总是很梦幻的导致我的程序崩溃退出。所以我决定写一个监视器, 查看当前进程列表 里面如果有这个名字的进程,就sleep一段时间,然后重复监测,如果没有这个进程,则执行这个进程。

但是还有一个问题,假设我的monitor程序也无故崩溃了,那么就没有人监视程序了,所以我又写了一个monitorB,第一个monitor姑且叫monitorA。二者互相监视,一旦任何一个出现崩溃,则运行之。

这有点像流氓软件,或者说auturun病毒。不过没办法,只能这样了。

//////////////////////////MonitorB的代码////////////////////////

static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
new Thread(CheckAndRunMonitor).Start();
}

private static void CheckAndRunMonitor()
{
while (true)
{
Process[] thisproc = System.Diagnostics.Process.GetProcessesByName("BadaMovie.MonitorA");
if (thisproc.Length <= 0)
{
Process process = new Process();
process.StartInfo.FileName = "BadaMovie.MonitorA.exe";
process.StartInfo.WorkingDirectory = ".//";
process.Start();
}
Thread.Sleep(10000);
}
}

}


///////////////////////被监视的进程里面要添加一个按钮///////////////////

//////这是为了使用户可以方便的结束这几个monitoir,要么手动结束,会很费劲

private void button1_Click(object sender, EventArgs e)
{
bool continueFlag = true;
uint count = 0;
try
{
while (continueFlag && count < 10)
{
continueFlag = false;
foreach (Process thisproc in System.Diagnostics.Process.GetProcesses())
{
if (thisproc.ProcessName == "BadaMovie.MonitorB")
{
thisproc.Kill();
continueFlag = true;
}
if (thisproc.ProcessName == "BadaMovie.MonitorA")
{
thisproc.Kill();
continueFlag = true;
}
}
count++;
Thread.Sleep(500);
}
}
catch (Exception ex)
{

}
if (count >= 10)
{
MessageBox.Show("关闭Monitor进程尝试超过了10次,均未果");
}
else
{
Application.Exit();
}
}

/////////////////////////这样,用户可以十分方便的结束任务,而不是一个一个的去进程管理器里面关闭


////////////////////////////MonitorA的代码////////////////

static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

new Thread(CheckAndRunMonitor).Start();
new Thread(CheckAndRunDataCollector).Start();
}

private static void CheckAndRunMonitor()
{
while(true)
{
Process[] thisproc = System.Diagnostics.Process.GetProcessesByName("BadaMovie.MonitorB");
if (thisproc.Length <= 0)
{
Process process = new Process();
process.StartInfo.FileName = "BadaMovie.MonitorB.exe";
process.StartInfo.WorkingDirectory = ".//";
process.Start();
}
Thread.Sleep(10000);
}
}

private static void CheckAndRunDataCollector()
{
while(true)
{
Process[] thisproc = System.Diagnostics.Process.GetProcessesByName("BadaMovie.MovieInfoCollector");
if (thisproc.Length <= 0)
{
Process process = new Process();
process.StartInfo.FileName = "BadaMovie.MovieInfoCollector.exe";
process.StartInfo.WorkingDirectory = ".//";
process.Start();
}
Thread.Sleep(10000);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐