/*
         * Метод, завершающий генерацию результата
         * компиляции пользовательского решения
         * поставленной задачи по программированию.
         */

        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);
        }