Exemple #1
0
 /// <summary>
 /// 执行
 /// </summary>
 /// <returns></returns>
 public virtual IProcessBasedCommandResult Execute()
 {
     lock (executeLock)
     {
         outputBuilder.Clear();
         int retCode = -1;
         using (process = Process.Start(processStartInfo))
         {
             process.OutputDataReceived += (s, e) => RaiseOutputReceived(e, false);
             process.ErrorDataReceived  += (s, e) => RaiseOutputReceived(e, true);
             process.BeginOutputReadLine();
             process.BeginErrorReadLine();
             process.WaitForExit();
             process.CancelErrorRead();
             process.CancelOutputRead();
             retCode = process.ExitCode;
             process = null;
         }
         return(new Result()
         {
             Output = outputBuilder.Result,
             ExitCode = retCode
         });
     }
 }
 /// <summary>
 /// 执行
 /// </summary>
 /// <returns></returns>
 public virtual IProcessBasedCommandResult Execute()
 {
     lock (executeLock)
     {
         outputBuilder.Clear();
         int retCode = -1;
         BeforeProcessStart(processStartInfo);
         using (process = Process.Start(processStartInfo))
         {
             OnProcessStarted(process);
             RegisterProcessEvent(process);
             process.BeginOutputReadLine();
             process.BeginErrorReadLine();
             BeforeWaiting(process);
             process.WaitForExit();
             process.CancelErrorRead();
             process.CancelOutputRead();
             retCode = process.ExitCode;
             OnProcessExited(process);
             process = null;
         }
         return(new Result()
         {
             Output = outputBuilder.Result,
             ExitCode = retCode
         });
     }
 }
Exemple #3
0
        /// <summary>
        /// 执行
        /// </summary>
        /// <returns></returns>
        public virtual IProcessBasedCommandResult Execute()
        {
            lock (executeLock)
            {
                processStartInfo = new ProcessStartInfo()
                {
                    RedirectStandardError  = NeverCreateNewWindow || !Settings.CreateNewWindow,
                    RedirectStandardOutput = NeverCreateNewWindow || !Settings.CreateNewWindow,
                    RedirectStandardInput  = false,
                    UseShellExecute        = false,
                    CreateNoWindow         = NeverCreateNewWindow || !Settings.CreateNewWindow,
                    FileName  = executableFile,
                    Arguments = args,
                };
                if (ManagedAdb.Adb.Manager?.Server?.IsEnable == true)
                {
                    string pathEnv = processStartInfo.EnvironmentVariables["path"];
                    processStartInfo.EnvironmentVariables["path"] = $"{ManagedAdb.Adb.AdbToolsDir.FullName};{pathEnv}";
                    processStartInfo.EnvironmentVariables["ANDROID_ADB_SERVER_PORT"] = ManagedAdb.Adb.Server.Port.ToString();
                }
                outputBuilder.Clear();
                int retCode = -1;
                BeforeProcessStart(processStartInfo);
                using (process = Process.Start(processStartInfo))
                {
                    OnProcessStarted(process);
                    RegisterProcessEvent(process);
                    if (process.StartInfo.CreateNoWindow)
                    {
                        process.BeginOutputReadLine();
                        process.BeginErrorReadLine();
                    }

                    BeforeWaiting(process);
                    process.WaitForExit();
                    if (process.StartInfo.CreateNoWindow)
                    {
                        process.CancelErrorRead();
                        process.CancelOutputRead();
                    }
                    retCode = process.ExitCode;
                    OnProcessExited(process);
                    process = null;
                }
                return(new Result()
                {
                    Output = outputBuilder.Result,
                    ExitCode = retCode
                });
            }
        }
 /// <summary>
 /// 无锁的执行..不建议覆写
 /// </summary>
 /// <param name="fileName"></param>
 /// <param name="args"></param>
 /// <returns></returns>
 protected virtual Result ExecuteWithoutLock(string fileName, string args)
 {
     if (disposedValue)
     {
         throw new ObjectDisposedException(nameof(CommandExecutor));
     }
     int exitCode;
     ProcessStartInfo pStartInfo;
     outputBuilder.Clear();
     pStartInfo = GetStartInfo(fileName, args);
     DateTime start = DateTime.Now;
     currentProcess = Process.Start(pStartInfo);
     OnProcessStarted(currentProcess);
     try
     {
         CommandExecuting?.Invoke(this, new CommandExecutingEventArgs(fileName, args));
         ExecutingSource?.Invoke(this, new CommandExecutingEventArgs(fileName, args));
     }
     catch { }
     currentProcess.WaitForExit();
     DateTime end = DateTime.Now;
     exitCode = currentProcess.ExitCode;
     OnProcessExited(currentProcess);
     currentProcess = null;
     var result = new Result(outputBuilder.Result, exitCode);
     try
     {
         CommandExecuted?.Invoke(this, new CommandExecutedEventArgs(fileName, args, result, end - start));
         ExecutedSource?.Invoke(this, new CommandExecutedEventArgs(fileName, args, result, end - start));
     }
     catch { }
     return result;
 }
        public void TestClear()
        {
            var output = new OutputBuilder().Append(shortMessage);

            Assert.AreNotEqual(output.Parse(terminalOptions), "");
            output.Clear();
            Assert.AreEqual(output.Parse(terminalOptions), "");
        }
        /// <summary>
        /// 执行
        /// </summary>
        /// <returns></returns>
        public virtual IProcessBasedCommandResult Execute()
        {
            lock (executeLock)
            {
                processStartInfo = new ProcessStartInfo()
                {
                    RedirectStandardError  = NeverCreateNewWindow || !Settings.CreateNewWindow,
                    RedirectStandardOutput = NeverCreateNewWindow || !Settings.CreateNewWindow,
                    RedirectStandardInput  = false,
                    UseShellExecute        = false,
                    CreateNoWindow         = NeverCreateNewWindow || !Settings.CreateNewWindow,
                    FileName  = executableFile,
                    Arguments = args,
                };
                outputBuilder.Clear();
                int retCode = -1;
                BeforeProcessStart(processStartInfo);
                using (process = Process.Start(processStartInfo))
                {
                    OnProcessStarted(process);
                    RegisterProcessEvent(process);
                    if (process.StartInfo.CreateNoWindow)
                    {
                        process.BeginOutputReadLine();
                        process.BeginErrorReadLine();
                    }

                    BeforeWaiting(process);
                    process.WaitForExit();
                    if (process.StartInfo.CreateNoWindow)
                    {
                        process.CancelErrorRead();
                        process.CancelOutputRead();
                    }
                    retCode = process.ExitCode;
                    OnProcessExited(process);
                    process = null;
                }
                return(new Result()
                {
                    Output = outputBuilder.Result,
                    ExitCode = retCode
                });
            }
        }
        public void TestClear()
        {
            var output            = new OutputBuilder().Append(originalMessage);
            var outputBuilderType = output.GetType();
            var bufferPos         = outputBuilderType.GetField("bufferPos", BindingFlags.Instance | BindingFlags.NonPublic);

            Assert.AreEqual(originalMessage.Length, bufferPos.GetValue(output));

            output.Clear();

            Assert.AreEqual(0, bufferPos.GetValue(output));
        }
Exemple #8
0
        /// <summary>
        /// 执行命令
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public ICommandResult Execute(string fileName, string args)
        {
            lock (_executingLock)
            {
                if (isDisposed)
                {
                    throw new ObjectDisposedException(nameof(HestExecutor));
                }
                //输出构造器
                outputBuilder.Clear();
                //记录开始时间
                DateTime start = DateTime.Now;
                //开始进程
                currentProcess = Process.Start(GetStartInfo(fileName, args));

                //监听
                currentProcess.OutputDataReceived += (s, e) =>
                {
                    outputBuilder.AppendOut(e.Data);
                    OutputReceived?.Invoke(this, new OutputReceivedEventArgs(e, false));
                };
                currentProcess.ErrorDataReceived += (s, e) =>
                {
                    outputBuilder.AppendError(e.Data);
                    OutputReceived?.Invoke(this, new OutputReceivedEventArgs(e, true));
                };
                currentProcess.BeginOutputReadLine();
                currentProcess.BeginErrorReadLine();

                //触发事件
                CommandExecuting?.Invoke(this, new CommandExecutingEventArgs(fileName, args));

                //等待进程结束
                currentProcess.WaitForExit();
                currentProcess.CancelErrorRead();
                currentProcess.CancelOutputRead();

                //记录结束时间
                DateTime end = DateTime.Now;
                //构造结果对象
                var result = new HestExecutorResult()
                {
                    ExitCode = currentProcess.ExitCode, Output = outputBuilder.Result
                };
                //触发结束事件
                CommandExecuted?.Invoke(this, new CommandExecutedEventArgs(fileName, args, result, end - start));
                //返回结果
                return(result);
            };
        }
Exemple #9
0
        /// <summary>Executes the command.</summary>
        /// <param name="actionInput">The full input specified for executing the command.</param>
        public override void Execute(ActionInput actionInput)
        {
            var userControlledBehavior = player.Behaviors.FindFirst <UserControlledBehavior>();

            userControlledBehavior.SecurityRoles |= role;

            var ob = new OutputBuilder();

            ob.AppendLine($"{player.Name} has been granted the {role.ToString()} role.");
            ob.AppendLine($"{player.Name} is now: {userControlledBehavior.SecurityRoles}.");
            actionInput.Controller.Write(ob);

            ob.Clear();
            ob.AppendLine($"You have been granted the {role.ToString()} role.");
            userControlledBehavior.Controller.Write(ob);

            player.FindBehavior <PlayerBehavior>()?.SavePlayer();
        }
Exemple #10
0
        /// <summary>
        /// 无锁的执行..不建议覆写
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        protected virtual Result ExecuteWithoutLock(string fileName, string args)
        {
            if (disposedValue)
            {
                throw new ObjectDisposedException(nameof(CommandExecutor));
            }
            int exitCode;
            ProcessStartInfo pStartInfo;

            outputBuilder.Clear();
            pStartInfo     = GetStartInfo(fileName, args);
            currentProcess = Process.Start(pStartInfo);
            OnProcessStarted(currentProcess);
            currentProcess.WaitForExit();
            exitCode = currentProcess.ExitCode;
            OnProcessExited(currentProcess);
            currentProcess = null;
            return(new Result(outputBuilder.Result, exitCode));
        }
Exemple #11
0
        /// <summary>Executes the command.</summary>
        /// <param name="actionInput">The full input specified for executing the command.</param>
        public override void Execute(ActionInput actionInput)
        {
            var session = actionInput.Session;

            if (session == null)
            {
                return;                  // This action only makes sense for player sessions.
            }
            var userControlledBehavior = player.FindBehavior <UserControlledBehavior>();

            userControlledBehavior.SecurityRoles |= role;

            var ob = new OutputBuilder();

            ob.AppendLine($"{player.Name} has been granted the {role.ToString()} role.");
            ob.AppendLine($"{player.Name} is now: {userControlledBehavior.SecurityRoles}.");
            session.Write(ob);

            ob.Clear();
            ob.AppendLine($"You have been granted the {role.ToString()} role.");
            userControlledBehavior.Session.Write(ob);

            player.FindBehavior <PlayerBehavior>()?.SavePlayer();
        }