Как запустить процесс (Task) удаленно и дождаться его завершения? - PullRequest
0 голосов
/ 23 октября 2018

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

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

Это работает очень хорошо для меня, но теперь я хотел бы использовать второй сервер для выполнения некоторых заданий.Есть ли способ запустить задание на удаленной машине и каким-то образом получить уведомление о том, когда оно закончилось?Я знаю, что WMI - это вариант, но мне было интересно, легко ли WMI (или что-то еще) вписалось бы в приведенную ниже структуру.

Вот как я это делаю (очень упрощенно) на одной машине:

List<Taskdata> TaskList = new List<Taskdata>();
string[] JobsToAdd = GetListFromSomewhere();

 foreach (var jobString in JobsToAdd)
 {
       var LastTask = new Task(RunProc, jobString);
       LastTask.Start();
       TaskList.Add(new Taskdata(LastTask, DateTime.UtcNow));
 }


if (TaskList.Any())
{
       Task.WaitAny(TaskList.Select(x => x.Task).ToArray());
}




public void RunProc(object state)
{
            var process = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = Path.Combine(@"H:\Projects\Simulator\Simulator\bin\Debug\", "Simulator001.exe"),
                    Arguments = (string)state,
                    WindowStyle = ProcessWindowStyle.Normal,
                    CreateNoWindow = false
                }
            };
            process.Start();
            process.WaitForExit();
}
...