Пример #1
0
        public static CmResult BuildSuccess(string message, string execMsg = "")
        {
            CmResult cr = new CmResult()
            {
                Success = true, Message = message, ExecMsg = execMsg
            };

            return(cr);
        }
Пример #2
0
        public static CmResult BuildFail(string message, string execMsg)
        {
            CmResult cr = new CmResult()
            {
                Success = false, Message = message, ExecMsg = execMsg
            };

            return(cr);
        }
Пример #3
0
        public static CmResult BuildCmm(string cmd)
        {
            string strOutput = null;
            bool   success   = false;

            try
            {
                ProcessStartInfo psi = new ProcessStartInfo("sh");
                psi.UseShellExecute        = false;
                psi.RedirectStandardError  = true;
                psi.RedirectStandardInput  = true;
                psi.RedirectStandardOutput = true;
                psi.CreateNoWindow         = true;
                using (Process proCompiler = new Process())
                {
                    proCompiler.StartInfo = psi;
                    proCompiler.Start();
                    proCompiler.StandardInput.WriteLine(cmd);

                    proCompiler.StandardInput.Flush();
                    proCompiler.StandardInput.Dispose();

                    //  是否有错误信息
                    bool flag = proCompiler.WaitForExit(StaticVariable.RUN_MILL);
                    //Console.WriteLine("-----------flag:" + flag.ToString() + " pid:" + proCompiler.Id);
                    if (!flag)
                    {
                        proCompiler.Dispose();
                        success   = false;
                        strOutput = $"执行时间超过{StaticVariable.RUN_MILL}ms,代码中可能包含死循环";
                    }
                    else
                    {
                        strOutput = proCompiler.StandardError.ReadToEnd();

                        if (string.IsNullOrEmpty(strOutput))
                        {
                            strOutput = proCompiler.StandardOutput.ReadToEnd();
                            success   = true;
                        }
                    }
                }
                return(success ? CmResult.BuildSuccess(string.IsNullOrEmpty(strOutput) ? "执行成功" : strOutput) : CmResult.BuildFail("执行失败", strOutput));
            }
            catch (Exception ex)
            {
                return(CmResult.BuildFail("执行失败", ex.Message));
            }
        }