Как сделать скрипт / программу, чтобы приложение всегда работало? - PullRequest
0 голосов
/ 10 марта 2010

У меня есть простой .exe, который должен работать постоянно.

К сожалению, иногда он неожиданно падает, и с этим ничего не поделаешь.

Я думаю о программе на C #, которая сканирует дерево запущенных приложений по таймеру и, если процесс останавливается, перезапускает его ... Не уверен, как это сделать, хотя ....

Есть еще идеи?

Ответы [ 5 ]

2 голосов
/ 10 марта 2010

Это довольно легко сделать, но «неожиданно падает, и с этим ничего нельзя поделать», звучит для меня весьма подозрительно. Возможно, вы имеете в виду, что данная программа от стороннего производителя, и вам нужно обойти проблемы, которые они не могут / не смогут исправить?

В любом случае, есть пример кода , чтобы сделать именно то, о чем вы говорите.

1 голос
/ 10 марта 2010

Первым решением было бы исправить ваш EXE, чтобы он не вылетал. Если вы не можете исправить это сейчас, вам, вероятно, нужно добавить обработку исключений, чтобы вы могли перехватить исключение и не закрывать EXE.

Второе решение - написать простую защитную программу, которая запустит ваш простой .exe-файл и будет контролировать конкретный дескриптор процесса. Когда программа закроется, она перезапустит.

0 голосов
/ 10 марта 2010

Ваша программа должна изначально запустить сам целевой процесс (с Process.Start ), а затем просто дождаться его завершения (с WaitForExit для объекта, который возвращается Process. Начните()). После этого вся процедура повторяется.

Таким образом, вы будете уверены, что следите за интересующим вас процессом, и вам вообще не нужно опрашивать список процессов.

Использование Process.Start () и WaitForExit () пример .

0 голосов
/ 10 марта 2010

Одна из хитростей, которые иногда применялись вредоносными программами в прошлые дни, заключалась в том, чтобы иметь два процесса, каждый из которых отслеживает запущенные в данный момент процессы, и перезапускать другой процесс, если он завершается.

Пространство имен System.Diagnostics имеет классы, которые могут помочь, в частности, «Process».

Например

static Process[] Process.GetProcesses()

возвращает список всех запущенных в данный момент процессов.

Если вашего другого процесса нет в этом списке, просто перезапустите его, например,

Process.Start()
0 голосов
/ 10 марта 2010

Самый простой способ - это заставить вашу программу посмотреть, работает ли сам экземпляр, и завершить работу, если это так. Задайте запланированное задание для запуска каждые несколько минут.

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...