Esempio n. 1
0
 protected void Page_Load(object sender, EventArgs e)
 {
     idPyetjes.Focus();
     baseDirectory = "D:\\Desktop\\CompileTest\\" + professorUsername + "\\pyetjet";
     question      = new Questions();
 }
        protected void SubmitCode(dynamic param)
        {
            fileLocation = studentFilesDirectory.FullName;
            string runArguments = "";
            int    paramId      = 0;

            do
            {
                string outputError = string.Empty, output = string.Empty;

                if (param != null && param.Count > paramId)
                {
                    runArguments = param[paramId].ToString();
                    //question.Parameters.Add(param[paramId]);
                }

                string cmdCompileCommand = paramId == 0 ?
                                           string.Format("/c cd {0} && javac {1}.java && java {1} {2}", fileLocation, fileName, runArguments).Trim() :
                                           string.Format("/c cd {0} && java {1} {2}", fileLocation, fileName, runArguments).Trim();

                Debug.WriteLine("cmd command " + cmdCompileCommand);

                cmd = new Process();
                ProcessStartInfo startInfo = new ProcessStartInfo();
                startInfo.UseShellExecute  = false;
                startInfo.WorkingDirectory = fileLocation;
                startInfo.FileName         = "C:\\WINDOWS\\system32\\cmd.exe";
                //startInfo.Verb = "runas";
                startInfo.Arguments   = cmdCompileCommand;
                startInfo.WindowStyle = ProcessWindowStyle.Hidden;

                startInfo.RedirectStandardOutput = true;
                startInfo.RedirectStandardError  = true;

                cmd.StartInfo = startInfo;
                cmd.Start();

                output      = cmd.StandardOutput.ReadToEnd();
                outputError = cmd.StandardError.ReadToEnd();

                //wait 10 seconds for cmd to exit, otherwise kill it
                if (!cmd.WaitForExit(milliseconds: 10000))
                {
                    cmd.Kill();
                    Debug.WriteLine("CMD took too long to finish. Just killed it!");
                }

                if (outputError.Length == 0)
                {
                    question.FinalResults.Add(output.Length != 0 ? output : null);
                }
                else
                {
                    question.FinalResults.Add("Exception");
                    Debug.WriteLine("output error: " + outputError);
                }
            } while (param.Count - 1 > paramId++);

            //question.FinalResults.Add(/*final reults*/);
            exam.Questions.Add(this.question);
            this.question = null;

            if (++questionsAskedSoFar <= questionsForThisExam)
            {
                LoadQuestion(questionsAskedSoFar);
                UpdateFormWithQuestionsData();
            }
            else
            {
                File.WriteAllText(fileLocation, JsonConvert.SerializeObject(exam));
            }
        }