public static void Grade(Submission submission) { if (!submission.Submitted || !submission.Valid) { Logger.Log("Skipping invalid submission"); IncrementGradeCount(0f); return; } // todo figure this bad boy out int tries = 10; while (true) { try { string exe = AutoGrader.Config.TestExecutablePath; File.Copy(submission.ResultPath, exe, true); File.SetAttributes(exe, FileAttributes.Normal); break; } catch (UnauthorizedAccessException e) { Logger.Log("Unauthorized: " + e.Message); Thread.Sleep(1000); } catch (IOException e) { Logger.Log("IO: " + e.Message); Thread.Sleep(1000); } if (tries-- != 0) { continue; } submission.Invalidate(UNKNOWN_INVALID); return; } string arguments = "/inisolation " + (AutoGrader.Config.TestbedAdapterPath ?? " ") + $" {AutoGrader.Config.TestbedDLLPath}"; var startinfo = new ProcessStartInfo { FileName = AutoGrader.Config.VSTestPath, Arguments = arguments, RedirectStandardOutput = true, RedirectStandardError = true }; var test = Process.Start(startinfo); if (test == null) { return; } ProcessResults(submission, test.StandardOutput); test.WaitForExit(); }