Exemplo n.º 1
0
        private Process StartProcess(ProcessRunSettings settings, StringBuilder errorsBuilder, params string[] env)
        {
            Process process = new Process
            {
                StartInfo =
                {
                    FileName = m_executablePath,
                    Arguments = settings.Arguments,
                    UseShellExecute = false,
                    RedirectStandardInput = true,
                    RedirectStandardOutput = true,
                    StandardOutputEncoding = Encoding.UTF8,
                    RedirectStandardError = true,
                    WorkingDirectory = m_defaultWorkingDirectory,
                    CreateNoWindow = true,
                },
            };

            if (settings.EnvironmentModifier != null)
                settings.EnvironmentModifier(process.StartInfo.EnvironmentVariables);

            // add additional environment variables
            for (int n = 0; n < env.Length; n += 2)
                process.StartInfo.EnvironmentVariables[env[n]] = env[n + 1];

            process.ErrorDataReceived += (sender, e) => errorsBuilder.Append(e.Data);

            // start process
            process.Start();

            // read asynchronously from the error stream
            process.BeginErrorReadLine();
            return process;
        }