Example #1
0
        public void Start()
        {
            if (IsRunning)
                throw new ApplicationException("already running.");

            _wasClosed = false;

            _process = new Process();
            _process.StartInfo.FileName = this.AppFileName;
            if (Arguments != null)
                _process.StartInfo.Arguments = Arguments;
            if (WorkingDirectory != null)
                _process.StartInfo.WorkingDirectory = WorkingDirectory;
            _process.StartInfo.RedirectStandardInput = true;
            _process.StartInfo.RedirectStandardOutput = ModeStdout != CommunicationMode.None;
            _process.StartInfo.RedirectStandardError = ModeStderr != CommunicationMode.None;
            _process.StartInfo.UseShellExecute = false;
            _process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            _process.StartInfo.CreateNoWindow = true;


            if (ModeStderr == CommunicationMode.None && ModeStdout == CommunicationMode.None)
            {
                _process.Exited += _process_Exited;
                _process.EnableRaisingEvents = true;
            }


            _process.Start();
            ProcessId = _process.Id;
            try { _process.PriorityClass = PriorityClass; }
            catch
            {
            }


            // Stderr
            if (ModeStderr != CommunicationMode.None)
            {
                _stderrReader = new AsyncStreamReader(_process.StandardError.BaseStream, BufferSizeStderr);
                _stderrReader.DataRead += _stderrReader_DataRead;
            }
            if (ModeStderr == CommunicationMode.Line)
            {
                _stderrLineReader = new AsyncLineReader(_stderrReader);
                if (Encoding != null) _stderrLineReader.Encoding = Encoding;
                _stderrLineReader.LineRead += _stderrLineReader_LineRead;
            }
            
            // Stdout
            if (ModeStdout != CommunicationMode.None)
            {
                _stdoutReader = new AsyncStreamReader(_process.StandardOutput.BaseStream, BufferSizeStdout);
                _stdoutReader.DataRead += _stdoutReader_DataRead;
            }
            if (ModeStdout == CommunicationMode.Line)
            {
                _stdoutLineReader = new AsyncLineReader(_stdoutReader);
                if (Encoding != null) _stdoutLineReader.Encoding = Encoding;
                _stdoutLineReader.LineRead += _stdoutLineReader_LineRead;
            }

            if (ModeStderr != CommunicationMode.None)
                _stderrReader.Begin();
            if (ModeStdout != CommunicationMode.None)
                _stdoutReader.Begin();

        }
Example #2
0
        public void Start()
        {
            if (IsRunning)
            {
                throw new ApplicationException("already running.");
            }

            _wasClosed = false;

            _process = new Process();
            _process.StartInfo.FileName = this.AppFileName;
            if (Arguments != null)
            {
                _process.StartInfo.Arguments = Arguments;
            }
            if (WorkingDirectory != null)
            {
                _process.StartInfo.WorkingDirectory = WorkingDirectory;
            }
            _process.StartInfo.RedirectStandardInput  = true;
            _process.StartInfo.RedirectStandardOutput = ModeStdout != CommunicationMode.None;
            _process.StartInfo.RedirectStandardError  = ModeStderr != CommunicationMode.None;
            _process.StartInfo.UseShellExecute        = false;
            _process.StartInfo.WindowStyle            = ProcessWindowStyle.Hidden;
            _process.StartInfo.CreateNoWindow         = true;


            if (ModeStderr == CommunicationMode.None && ModeStdout == CommunicationMode.None)
            {
                _process.Exited += _process_Exited;
                _process.EnableRaisingEvents = true;
            }


            _process.Start();
            ProcessId = _process.Id;
            try { _process.PriorityClass = PriorityClass; }
            catch
            {
            }


            // Stderr
            if (ModeStderr != CommunicationMode.None)
            {
                _stderrReader           = new AsyncStreamReader(_process.StandardError.BaseStream, BufferSizeStderr);
                _stderrReader.DataRead += _stderrReader_DataRead;
            }
            if (ModeStderr == CommunicationMode.Line)
            {
                _stderrLineReader = new AsyncLineReader(_stderrReader);
                if (Encoding != null)
                {
                    _stderrLineReader.Encoding = Encoding;
                }
                _stderrLineReader.LineRead += _stderrLineReader_LineRead;
            }

            // Stdout
            if (ModeStdout != CommunicationMode.None)
            {
                _stdoutReader           = new AsyncStreamReader(_process.StandardOutput.BaseStream, BufferSizeStdout);
                _stdoutReader.DataRead += _stdoutReader_DataRead;
            }
            if (ModeStdout == CommunicationMode.Line)
            {
                _stdoutLineReader = new AsyncLineReader(_stdoutReader);
                if (Encoding != null)
                {
                    _stdoutLineReader.Encoding = Encoding;
                }
                _stdoutLineReader.LineRead += _stdoutLineReader_LineRead;
            }

            if (ModeStderr != CommunicationMode.None)
            {
                _stderrReader.Begin();
            }
            if (ModeStdout != CommunicationMode.None)
            {
                _stdoutReader.Begin();
            }
        }