/* * Метод, завершающий генерацию результата * компиляции пользовательского решения * поставленной задачи по программированию. */ public CompilerResult ReturnCompilerResult(CompilerResult temporaryResult) { /* * Проверка на предопределение * наличия ошибок при компиляции. */ if (!temporaryResult.HasErrors) { // Проверяем на наличие исполняемого файла temporaryResult.HasErrors = !File.Exists(temporaryResult.ExeFullname); } // Возвращаем результат компиляции return(temporaryResult); }
/* * Метод запускает указанный компилятор * или интерпритатор с указанными аргу- * ментами и возвращает результат * компиляции пользовательского решения * поставленной задачи. */ public CompilerResult RunCompiler(string compilerFullName, string compilerArgs) { // Создаём новый экземпляр процесса компилятора var cplProc = new Process(); // Устанавливаем информацию о старте процесса var pStartInfo = new ProcessStartInfo(compilerFullName, compilerArgs) { // Никаких ошибок, я сказал! ErrorDialog = false, // Минимизируем его, ибо не достоен он почестей! WindowStyle = ProcessWindowStyle.Minimized, // Перехватываем выходной поток RedirectStandardOutput = true, // Перехватываем поток ошибок RedirectStandardError = true, // Для перехвата делаем процесс демоном UseShellExecute = false }; // Устанавливаем информацию о старте процесса в дескриптор процесса компилятора cplProc.StartInfo = pStartInfo; // Запускаем процесс компилятора cplProc.Start(); // Ожидаем завершение процесса компилятора cplProc.WaitForExit(); /* * Осуществляем чтение выходных потоков * компилятора в специально созданные * для этого переменные. */ var standartOutput = cplProc.StandardOutput.ReadToEnd(); var standartError = cplProc.StandardError.ReadToEnd(); /* * Если выходной поток компилятора * пуст, заполняем его не нужным * барахлом. */ if (standartOutput.Length == 0) { standartOutput = "SimplePM_Server"; } // Объявляем переменную результата компиляции var result = new CompilerResult() { /* * Получаем полный текст сообщений * компилятора и записываем его в * специально отведенную для этого * переменную. */ CompilerMessage = HttpUtility.HtmlEncode(standartOutput + "\n" + standartError) }; // Возвращаем результат компиляции return(result); }