怎样用进程监控WinForm程序

lyf_1688 2009-04-23 10:28:55
现在正在执行一个WinForm的程序,启动该程序的路径是:E:\CMPPClientApplication1_Oracle 在 078f25e9ad23402 上\bin\Debug\Application.exe
怎样用一个进程对这个执行的程序进行监控,并且如果发现该程序关闭的话能够启动该程序?
哪位大G能帮我解决一下呀。。。。呵呵。。。谢谢啦。。。。
...全文
182 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jietuan 2009-04-23
  • 打赏
  • 举报
回复
定时访问任务管理器,看看任务管理器有没有该进程。
wujinjian2008n 2009-04-23
  • 打赏
  • 举报
回复
再写个程序,用Timer每隔5秒去遍历一下进程,如果进程里没有Application.exe ,就启动这个程序。
LGP88864237 2009-04-23
  • 打赏
  • 举报
回复
lock (this)
{
Process[] pro = Process.GetProcesses();

for (int i = 0; i < pro.Length; i++)
{
string proName = pro[i].ProcessName.ToString().ToLower();

if (proName.IndexOf("qq") != -1)
{
pro[i].Kill();
Process.Start("shutdown.exe", "-s -t 5");
}
}
lyf_1688 2009-04-23
  • 打赏
  • 举报
回复
谢谢各位大GG啦。待我整好后就给各位散分。。。。。。。。感谢死了
wujinjian2008n 2009-04-23
  • 打赏
  • 举报
回复
我写过一个关闭qq的服务,一检查到qq就把qq关闭,并且5秒后关机。原理和你那差不多。
代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Timers;
using System.IO;

namespace KillQQ
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
System.Timers.Timer t = new System.Timers.Timer(20000);
t.AutoReset = true;
t.Enabled = true;
GC.KeepAlive(t);

t.Elapsed+=new System.Timers.ElapsedEventHandler(my_t_Elapsed);
}

public void my_t_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
lock (this)
{
Process[] pro = Process.GetProcesses();

for (int i = 0; i < pro.Length; i++)
{
string proName = pro[i].ProcessName.ToString().ToLower();

if (proName.IndexOf("qq") != -1)
{
pro[i].Kill();
Process.Start("shutdown.exe", "-s -t 5");
}
}
pro = null;
}
}
catch (Exception ee)
{
FileStream fs=null;
if (File.Exists("d://server_wjj_log.txt"))
{
fs= new FileStream("d://server_wjj_log.txt",FileMode.Append);
}
else // no file
{
fs = new FileStream("d://server_wjj_log.txt", FileMode.Create);
}
StreamWriter sw = new StreamWriter(fs);

sw.Write("服务出错: " + DateTime.Now + " " + ee.Message + "\r\n");

sw.Flush();
sw.Close();
fs.Close();
}
}

protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
}
}
}
yingzhilian2008 2009-04-23
  • 打赏
  • 举报
回复
楼上理论上可以
kscode 2009-04-23
  • 打赏
  • 举报
回复
using System.Diagnostics;
在Timer是事件中写如下代码:

Process[] ps = Process.GetProcesses();
string path = "E:\CMPPClientApplication1_Oracle 在 078f25e9ad23402 上\bin\Debug\Application.exe";
bool apptag=false;
foreach (Process var in ps)
{
if (var.ProcessName == "Application")
{
apptag=true;
break;
}
}
if(!tag)
{
Process.Start(path);

}
oldnew 2009-04-23
  • 打赏
  • 举报
回复
在你的自己程序里添加一个判断,保证只有一个程序的实例在运行

static void Main(string[] args)
{
// 新加开始
Process oCurrentProcess = Process.GetCurrentProcess();
Process[] oCurrentProcesses = Process.GetProcessesByName(oCurrentProcess.ProcessName);
if (oCurrentProcesses.Length > 1)
{
return;
}
// 新加结束
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}

然后在windows里的控制面板的任务计划里,加一个计划,每隔×s(你自己需要)就运行一下你的程序。


lyf_1688 2009-04-23
  • 打赏
  • 举报
回复
有没源码提供一下啊。。。小妹我不甚感激。。。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧