public async Task ExecuteProcessAsync(ILog log, string filename, List <string> arguments) { if (log == null) { throw new ArgumentNullException(nameof(log)); } using var proc = new Process(); proc.StartInfo.FileName = filename; proc.StartInfo.Arguments = StringUtils.FormatArguments(arguments); if (!string.IsNullOrEmpty(WorkingDirectory)) { proc.StartInfo.WorkingDirectory = WorkingDirectory; } envManager.SetEnvironmentVariables(proc); foreach (DictionaryEntry de in proc.StartInfo.EnvironmentVariables) { log.WriteLine($"export {de.Key}={de.Value}"); } mainLog.WriteLine("Executing {0} ({1})", testTask.TestName, testTask.Mode); if (!dryRun) { testTask.ExecutionResult = TestExecutingResult.Running; var result = await ProcessManager.RunAsync(proc, log, Timeout); if (result.TimedOut) { testTask.FailureMessage = $"Execution timed out after {Timeout.TotalMinutes} minutes."; log.WriteLine(testTask.FailureMessage); testTask.ExecutionResult = TestExecutingResult.TimedOut; } else if (result.Succeeded) { testTask.ExecutionResult = TestExecutingResult.Succeeded; } else { testTask.ExecutionResult = TestExecutingResult.Failed; testTask.FailureMessage = $"Execution failed with exit code {result.ExitCode}"; } } mainLog.WriteLine("Executed {0} ({1})", testTask.TestName, testTask.Mode); }