Esempio n. 1
0
        private void InProcess(IGridVisualFeedback grid, IVariableList variableList)
        {
            var inProcessJobIdentifyerHelper = new InProcessJobIdentifyerHelper();
            var jobId = inProcessJobIdentifyerHelper.GetIdentifyerFromString(Command);
            var job   = inProcessJobIdentifyerHelper.GetJob(jobId);
            var args  = new ArgumentList(Arguments);

            args = args.Decode(variableList);
            job.Begin(args);
            while (!job.HasExited)
            {
                grid.CursorBlink = !grid.CursorBlink;
                grid.Invalidate();
                Thread.Sleep(1000);
                if (DateTime.Now.Subtract(StartTime !.Value) <= Timeout)
                {
                    continue;
                }
                EndTime     = DateTime.Now;
                Status      = JobStatus.Timeout;
                FailMessage = "Timeout";
                ExitCode    = -1;
                return;
            }
            ExitCode = job.ExitCode;
            Status   = ExitCode == 0
                ? JobStatus.Completed
                : JobStatus.Failed;
            if (Status == JobStatus.Failed && job.Exception != null)
            {
                FailMessage = job.Exception.Message;
            }
        }
Esempio n. 2
0
        public void Run(ILogger log, IGridVisualFeedback grid, IVariableList variableList)
        {
            try
            {
                StartTime = DateTime.Now;
                if (Config.EnableLogging)
                {
                    var s = StartTime.Value;
                    var h = Hidden ? " (hidden)" : "";
                    var n = Name.Trim();
                    if (string.IsNullOrEmpty(n))
                    {
                        n = Command;
                    }
                    var result = log.AppendLog($"{s.Year:0000}-{s.Month:00}-{s.Day:00} {s.Hour:00}:{s.Minute:00}:{s.Second:00}{h}: {n}");
                    if (!result && Config.TreatLoggingErrorsAsStepErrors)
                    {
                        throw new SystemException("Logging failed.");
                    }
                }

                if (Command.StartsWith("@"))
                {
                    InProcess(grid, variableList);
                }
                else
                {
                    OutOfProcess(grid, variableList);
                }

                EndTime = DateTime.Now;

                if (Config.EnableLogging)
                {
                    var s      = EndTime.Value;
                    var result = log.AppendLog($"Ended at {s.Year:0000}-{s.Month:00}-{s.Day:00} {s.Hour:00}:{s.Minute:00}:{s.Second:00} with exit code: {ExitCode}.");
                    if (!result && Config.TreatLoggingErrorsAsStepErrors)
                    {
                        throw new SystemException("Logging failed.");
                    }
                }
            }
            catch (Exception e)
            {
                EndTime     = DateTime.Now;
                Status      = JobStatus.Failed;
                FailMessage = e.Message;

                if (string.IsNullOrWhiteSpace(FailMessage))
                {
                    FailMessage = e.GetType().Name;
                }

                if (Config.EnableLogging)
                {
                    var s = EndTime.Value;
                    log.AppendLog($"System error at {s.Year:0000}-{s.Month:00}-{s.Day:00} {s.Hour:00}:{s.Minute:00}:{s.Second:00}: {FailMessage}");
                }
            }
        }
Esempio n. 3
0
        private void OutOfProcess(IGridVisualFeedback grid, IVariableList variableList)
        {
            var start = new ProcessStartInfo(Command)
            {
                Arguments   = new ArgumentDecoder(variableList).GetDecodedText(Arguments),
                WindowStyle = Hidden ? ProcessWindowStyle.Hidden : ProcessWindowStyle.Normal
            };
            var process = Process.Start(start);

            if (process == null)
            {
                Status = JobStatus.Failed;
                return;
            }
            while (!process.HasExited)
            {
                grid.CursorBlink = !grid.CursorBlink;
                grid.Invalidate();
                Thread.Sleep(1000);
                if (DateTime.Now.Subtract(StartTime !.Value) <= Timeout)
                {
                    continue;
                }
                process.Kill();
                EndTime     = DateTime.Now;
                Status      = JobStatus.Timeout;
                FailMessage = "Timeout";
                return;
            }
            ExitCode = process.ExitCode;
            Status   = ExitCode == 0
                ? JobStatus.Completed
                : JobStatus.Failed;
        }