如何使脚本/程序能够使应用程序始终运行?

时间:2010-03-10 04:56:23

标签: c# c++ python

我有一个简单的.exe需要连续运行。

不幸的是,有时它会意外崩溃,而且没有什么可以做的。

我想的是一个C#程序,它扫描一个计时器上正在运行的应用程序树,如果进程停止运行,它会重新启动它......?不知道如何做到这一点......

还有其他想法吗?

5 个答案:

答案 0 :(得分:2)

这样做相当容易,但是“意外崩溃,并没有任何可以做到的事情”对我来说听起来非常可疑。也许你的意思是这个程序来自第三方,你需要解决他们不能/不会解决的问题?

无论如何,有很多sample code可以完全按照你所说的去做。

答案 1 :(得分:1)

第一个解决方案是修复你的EXE,所以它不会崩溃。如果你现在无法解决它,你可能需要添加异常处理,这样你就可以捕获异常,而不是关闭EXE。

第二种解决方案是编写简单的防护程序,它将启动简单的.exe并监视特定的进程句柄。它将在关闭时重新启动程序。

答案 2 :(得分:0)

最简单的方法是让程序查看自身的实例是否正在运行,如果是,则退出。设置一个计划任务,每隔几分钟运行一次。

class Program
{
    static void Main(string[] args)
    {
        if (IsRunning())
        {
            return;
        }
        else
        {
            for (int x = 0; x < 10; x++)
            {
                //Do Stuff
                System.Threading.Thread.Sleep(1000);
            }
        }
    }

    private static bool IsRunning()
    {

        Process[] P = Process.GetProcessesByName( Process.GetCurrentProcess().ProcessName  ) ;
        return P.Count() > 1;
    }
}

答案 3 :(得分:0)

过去几天恶意软件偶尔使用的一个技巧是拥有两个进程,每个进程监视当前正在运行的进程,如果终止进程则重新启动另一个进程。

System.Diagnostics命名空间具有可以提供帮助的类,特别是“处理”。

例如

static Process[] Process.GetProcesses()

返回所有当前正在运行的进程的列表。

如果您的其他进程不在此列表中,则只需重新启动它,例如

Process.Start()

答案 4 :(得分:0)

您的程序需要最初启动目标进程本身(使用Process.Start),然后等待它终止(在Process.Start()返回的对象上使用WaitForExit。之后重复整个过程。

通过这种方式,您可以确定自己正在查看自己感兴趣的流程,而且根本不需要轮询流程列表。

Process.Start()和WaitForExit()用法example