@beduin01

Как перезапускать приложение через n минут?

Нужно каждые 2 минуты перезапускать приложение. Есть ли готовые решения? Если нет, то как написать? Принимать как аргумент имя нужного ПО с аргументами для его запуска? И потом таймер ставить?
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
twobomb
@twobomb
Накидал что-то примерное на C#
Код

try
            {
                Console.WriteLine("Введите путь к приложению:");
                string path = Console.ReadLine().Trim();
                if (!File.Exists(path)){
                    Console.WriteLine("Файл не найден");
                    Console.ReadKey();
                    return;
                }
                else
                {
                    Console.WriteLine("Введите аргументы запуска(не обязательно):");
                    string startupArgs= Console.ReadLine().Trim();

                    Console.WriteLine("Введите время работы таймера например 10sec или 5min или 3hour или 3hour 5min 10sec");
                    string time = Console.ReadLine().Trim();
                    int ms = 0;
                    var sec = Regex.Match(time, @"(\d+)\s*sec");
                    if (sec.Success)
                        ms += Int32.Parse(sec.Groups[1].Value) * 1000;
                    var min= Regex.Match(time, @"(\d+)\s*min");
                    if (min.Success)
                        ms += Int32.Parse(min.Groups[1].Value) * 60*1000;
                    var hour = Regex.Match(time, @"(\d+)\s*hours?");
                    if (hour.Success)
                        ms += Int32.Parse(hour.Groups[1].Value) *60 * 60 * 1000;
                    if (ms < 5000){
                        Console.WriteLine("Таймер минимум на 5сек");
                        Console.ReadKey();
                        return;
                    }
                    Console.WriteLine("Закрывать ли другие копии этого процесса? y/n");
                    bool isCloseOthers = false;
                    while (true)
                    {
                        var key = Console.ReadKey(true).Key;
                        if ( key == ConsoleKey.Y)
                        {
                            isCloseOthers = true;
                            break;
                        }
                        else if (key == ConsoleKey.N)
                        {
                            isCloseOthers = false;
                            break;
                        }
                    }

                    Console.WriteLine("Перезагружать таймер автоматически каждый раз? y/n");
                    bool isAutoReset = false;
                    while (true){
                        var key = Console.ReadKey(true).Key;
                        if (key== ConsoleKey.Y)
                        {
                            isAutoReset = true;
                            break;
                        }
                        else if (key == ConsoleKey.N)
                        {
                            isAutoReset = false;
                            break;
                        }
                    }

                    Timer t = new Timer(ms);
                    t.AutoReset = isAutoReset;
                    t.Elapsed += (sender, eventArgs) =>{
                        Console.WriteLine("Перезапуск! Для отключения таймера нажмите X");
                        var p = Process.Start(path, startupArgs);
                        if (isCloseOthers){
                            var duplicates = Process.GetProcessesByName(p.ProcessName).Where(process => process.Id != p.Id)
                                .ToList();
                            foreach (var duplicate in duplicates)
                                duplicate.Kill();
                        }
                    };
                    Console.WriteLine("Таймер запущен(" + TimeSpan.FromMilliseconds(t.Interval).ToString(@"hh\:mm\:ss") + ")! Для отключения таймера нажмите X");
                    t.Start();

                    while (Console.ReadKey(true).Key != ConsoleKey.X) { }
                    t.Stop();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.ReadKey();
            }


Билд
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dimonchik2013
@dimonchik2013
non progredi est regredi
cron / sheduler linux / win
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы