示例#1
0
        /// <summary>
        /// Construector.
        /// </summary>
        /// <param name="outReader">Output reader.</param>
        /// <param name="args">Arguments.</param>
        public IgniteProcess(IIgniteProcessOutputReader outReader, params string[] args)
        {
            // Add test dll path
            args = args.Concat(new[] { "-assembly=" + GetType().Assembly.Location }).ToArray();

            _proc = Start(ExePath, IgniteHome.Resolve(null), outReader, args);
        }
示例#2
0
        /// <summary>
        /// Attaches the process console reader.
        /// </summary>
        public static void AttachProcessConsoleReader(Process proc, IIgniteProcessOutputReader outReader = null)
        {
            outReader = outReader ?? DfltOutReader;

            Attach(proc, proc.StandardOutput, outReader, false);
            Attach(proc, proc.StandardError, outReader, true);
        }
示例#3
0
        /// <summary>
        /// Starts a grid process.
        /// </summary>
        /// <param name="exePath">Exe path.</param>
        /// <param name="ggHome">Ignite home.</param>
        /// <param name="outReader">Output reader.</param>
        /// <param name="args">Arguments.</param>
        /// <returns>Started process.</returns>
        public static Process Start(string exePath, string ggHome, IIgniteProcessOutputReader outReader = null,
                                    params string[] args)
        {
            Debug.Assert(!string.IsNullOrEmpty(exePath));
            Debug.Assert(!string.IsNullOrEmpty(ggHome));

            // 1. Define process start configuration.
            var sb = new StringBuilder();

            foreach (string arg in args)
            {
                sb.Append('\"').Append(arg).Append("\" ");
            }

            var procStart = new ProcessStartInfo
            {
                FileName  = exePath,
                Arguments = sb.ToString()
            };

            if (!string.IsNullOrEmpty(ggHome))
            {
                procStart.EnvironmentVariables[IgniteManager.EnvIgniteHome] = ggHome;
            }

            procStart.EnvironmentVariables[IgniteManager.EnvIgniteNativeTestClasspath] = "true";

            procStart.CreateNoWindow  = true;
            procStart.UseShellExecute = false;

            procStart.RedirectStandardOutput = true;
            procStart.RedirectStandardError  = true;

            var workDir = Path.GetDirectoryName(exePath);

            if (workDir != null)
            {
                procStart.WorkingDirectory = workDir;
            }

            Console.WriteLine("About to run Apache.Ignite.exe process [exePath=" + exePath + ", arguments=" + sb + ']');

            // 2. Start.
            var proc = Process.Start(procStart);

            Debug.Assert(proc != null);

            // 3. Attach output readers to avoid hangs.
            outReader = outReader ?? DfltOutReader;

            Attach(proc, proc.StandardOutput, outReader, false);
            Attach(proc, proc.StandardError, outReader, true);

            return(proc);
        }
示例#4
0
 /// <summary>
 /// Attach output reader to the process.
 /// </summary>
 /// <param name="proc">Process.</param>
 /// <param name="reader">Process stream reader.</param>
 /// <param name="outReader">Output reader.</param>
 /// <param name="err">Whether this is error stream.</param>
 private static void Attach(Process proc, StreamReader reader, IIgniteProcessOutputReader outReader, bool err)
 {
     new Thread(() =>
     {
         while (!proc.HasExited)
         {
             outReader.OnOutput(proc, reader.ReadLine(), err);
         }
     })
     {
         IsBackground = true
     }.Start();
 }
示例#5
0
 /// <summary>
 /// Attach output reader to the process.
 /// </summary>
 /// <param name="proc">Process.</param>
 /// <param name="reader">Process stream reader.</param>
 /// <param name="outReader">Output reader.</param>
 /// <param name="err">Whether this is error stream.</param>
 private static void Attach(Process proc, StreamReader reader, IIgniteProcessOutputReader outReader, bool err)
 {
     new Thread(() =>
     {
         while (!proc.HasExited)
             outReader.OnOutput(proc, reader.ReadLine(), err);
     }) {IsBackground = true}.Start();
 }
示例#6
0
        /// <summary>
        /// Starts a grid process.
        /// </summary>
        /// <param name="exePath">Exe path.</param>
        /// <param name="ggHome">Ignite home.</param>
        /// <param name="outReader">Output reader.</param>
        /// <param name="args">Arguments.</param>
        /// <returns>Started process.</returns>
        public static Process Start(string exePath, string ggHome, IIgniteProcessOutputReader outReader = null, 
            params string[] args)
        {
            Debug.Assert(!string.IsNullOrEmpty(exePath));
            Debug.Assert(!string.IsNullOrEmpty(ggHome));

            // 1. Define process start configuration.
            var sb = new StringBuilder();

            foreach (string arg in args)
                sb.Append('\"').Append(arg).Append("\" ");

            var procStart = new ProcessStartInfo
            {
                FileName = exePath,
                Arguments = sb.ToString()
            };

            if (!string.IsNullOrEmpty(ggHome))
                procStart.EnvironmentVariables[IgniteHome.EnvIgniteHome] = ggHome;

            procStart.EnvironmentVariables[Classpath.EnvIgniteNativeTestClasspath] = "true";

            procStart.CreateNoWindow = true;
            procStart.UseShellExecute = false;

            procStart.RedirectStandardOutput = true;
            procStart.RedirectStandardError = true;

            var workDir = Path.GetDirectoryName(exePath);

            if (workDir != null)
                procStart.WorkingDirectory = workDir;

            Console.WriteLine("About to run Apache.Ignite.exe process [exePath=" + exePath + ", arguments=" + sb + ']');

            // 2. Start.
            var proc = Process.Start(procStart);

            Debug.Assert(proc != null);

            // 3. Attach output readers to avoid hangs.
            outReader = outReader ?? DfltOutReader;

            Attach(proc, proc.StandardOutput, outReader, false);
            Attach(proc, proc.StandardError, outReader, true);

            return proc;
        }
示例#7
0
        /// <summary>
        /// Construector.
        /// </summary>
        /// <param name="outReader">Output reader.</param>
        /// <param name="args">Arguments.</param>
        public IgniteProcess(IIgniteProcessOutputReader outReader, params string[] args)
        {
            // Add test dll path
            args = args.Concat(new[] {"-assembly=" + GetType().Assembly.Location}).ToArray();

            _proc = Start(ExePath, IgniteHome.Resolve(null), outReader, args);
        }