public int ProcessArguments()
        {
            ArgDetail consoleArg = BuildConsoleArgs();

            int consoleReturn = ConsoleHelper.PopNewConsole(consoleArg);

            if (consoleReturn != 0) //Process execute failed
            {
                throw new Exception($"Interactive console process execute failed, ErrorCode: {consoleReturn}");
            }
            else
            {
                ProcessResult result = JsonSerializer.Deserialize <ProcessResult>(File.ReadAllText(consoleArg.OutFilePath));
                if (result != null)
                {
                    returnValue = Convert.ToInt32(result.ReturnValue);
                    if (result.OutArgValues != null && result.OutArgValues.Count > 0)
                    {
                        int i = 0;
                        foreach (var outArg in result.OutArgValues)
                        {
                            outArgs[i] = outArg.Value;
                            i++;
                        }
                    }
                }
            }

            return(returnValue);
        }
        private ArgDetail BuildConsoleArgs()
        {
            // Print Helper text
            StringBuilder consoleMsgBuilder = new StringBuilder();

            consoleMsgBuilder.AppendLine("Help Message:");
            consoleMsgBuilder.AppendLine(GetDividingLine());
            consoleMsgBuilder.AppendLine(this.HelperMessage);
            //Console.WriteLine(consoleMsgBuilder.ToString());
            consoleMsgBuilder.AppendLine(GetDividingLine());

            // Print Action Parameter (In Arguments)
            if (builder.InArgDataTable.Rows.Count > 0)
            {
                consoleMsgBuilder.AppendLine("Action Parameters:");
                consoleMsgBuilder.AppendLine(GetDividingLine());

                foreach (DataRow row in builder.InArgDataTable.Rows)
                {
                    consoleMsgBuilder.AppendLine(ConsoleHelper.GenerateLineRow(new string[] { "" + row[0], "" + row[1] }));
                }
                consoleMsgBuilder.AppendLine(GetDividingLine());
            }

            consoleMsgBuilder.AppendLine("Action Result:");
            consoleMsgBuilder.AppendLine(GetDividingLine());

            // output message, out parma, tempfile path
            ParaCommandInfo returnParam      = null;
            int             firstOutArgIndex = 0;
            string          keyVaule         = string.Empty;

            if (builder.HasReturnVal)
            {
                //returnValue = GetValueFromConsole("" + builder.OutArgDataTable.Rows[firstOutArgIndex][0], builder.RetValType);
                returnParam = new ParaCommandInfo()
                {
                    Content        = "" + builder.OutArgDataTable.Rows[firstOutArgIndex][0],
                    ParameterIndex = 0,
                    ParameterName  = "" + builder.OutArgDataTable.Rows[firstOutArgIndex][0],
                    Title          = "Please enter [Y] when you're ready to perform interactive action or enter [N] to abort the case.",
                    Type           = builder.RetValType.ToString(),
                };

                firstOutArgIndex = 1;
            }

            ArgDetail arg = new ArgDetail()
            {
                HelpMsg     = consoleMsgBuilder.ToString(),
                OutFilePath = Path.GetTempFileName(),
                ReturnParam = returnParam,
                OutParams   = paraCommands
            };

            return(arg);
        }