Example #1
0
        /// <summary>
        /// Closes the main window of all instances of a process. If the window does not close, it Kills the process
        /// </summary>
        /// <param name="mpi">The object which contains the information about the process to kill</param>
        public bool CloseThenKillProcess(IModuleProcessInfo mpi)
        {
            Process[] processesToKill;
            Stopwatch sw;
            int       tries = KILL_ATTEMPTS;

            processesToKill = Process.GetProcessesByName(mpi.ProcessName);
            if (processesToKill.Length < 1)
            {
                return(true);
            }

            // Request close
            Log.WriteLine(6, "Stopping process '" + mpi.ProcessName + "'...");
            foreach (Process p in processesToKill)
            {
                try
                {
                    p.CloseMainWindow();
                }
                catch { }
            }

            // Wait for processes to close
            sw = new Stopwatch();
            sw.Start();
            while (sw.ElapsedMilliseconds < 1000)
            {
                processesToKill = Process.GetProcessesByName(mpi.ProcessName);
                if (processesToKill.Length == 0)
                {
                    Log.WriteLine(6, "Stopping process '" + mpi.ProcessName + "' complete!");
                    sw.Stop();
                    return(true);
                }
                System.Threading.Thread.Sleep(100);
            }
            sw.Stop();

            // Kill alive process
            Log.WriteLine(6, "Stopping process '" + mpi.ProcessName + "' failed. Killing the process...");

            do
            {
                foreach (Process p in processesToKill)
                {
                    try
                    {
                        p.Kill();
                        p.WaitForExit(500);
                    }
                    catch
                    {
                        Log.WriteLine(5, "Kill process '" + mpi.ProcessName + "' failed.");
                        return(false);
                    }
                }
            } while ((RunningProcessesCount(mpi) > 0) && (tries-- > 0));
            return(true);
        }
Example #2
0
        private void ProcCheck(IModuleClientTcp module)
        {
            IModuleProcessInfo pi = module.ProcessInfo;

            if ((pi == null) || (String.IsNullOrEmpty(pi.ProcessName)))
            {
                WriteError("No process information found for module {0}", module);
                return;
            }

            Console.Write("Checking running instances for module {0}... ", module.Name);
            try
            {
                int count = this.procMan.CheckModule(module);
                if (count >= 0)
                {
                    Console.WriteLine("Done! There are {0} instances of {1} being executed.", count, module.Name);
                }
                else
                {
                    Console.WriteLine("Failed!");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine();
                WriteError("Failed: " + ex.Message);
            }
        }
 /// <summary>
 /// Initializes a new instance of RemoteStartupRequest
 /// </summary>
 /// <param name="moduleName">Module name</param>
 /// <param name="method">The method of startup sequence for modules</param>
 /// <param name="mpi">Data about the program asociated to this module</param>
 public RemoteStartupRequest(string moduleName, ModuleStartupMethod method, IModuleProcessInfo mpi)
 {
     this.method = method;
     this.moduleName = moduleName;
     if (mpi != null)
         this.processInfo = new ModuleProcessInfo(mpi.ProcessName, mpi.ProgramPath, mpi.ProgramArgs);
 }
Example #4
0
        /// <summary>
        /// Kills all instances of a process
        /// </summary>
        /// <param name="mpi">The object which contains the information about the process to kill</param>
        public bool KillProcess(IModuleProcessInfo mpi)
        {
            Process[] processesToKill;
            int       tries = KILL_ATTEMPTS;

            processesToKill = Process.GetProcessesByName(mpi.ProcessName);
            if (processesToKill.Length < 1)
            {
                return(true);
            }

            // Kill alive process
            Log.WriteLine(6, "Killing the process '" + mpi.ProcessName + "'...");

            do
            {
                foreach (Process p in processesToKill)
                {
                    try
                    {
                        p.Kill();
                        p.WaitForExit(500);
                    }
                    catch
                    {
                        Log.WriteLine(5, "Kill process '" + mpi.ProcessName + "' failed.");
                        return(false);
                    }
                }
            } while ((RunningProcessesCount(mpi) > 0) && (tries-- > 0));
            return(true);
        }
Example #5
0
 /// <summary>
 /// Gets the number of processes running with the specified module process info
 /// </summary>
 /// <param name="mpi">The object which contains the information about the process to check</param>
 /// <returns>The number of runnin processes</returns>
 public int RunningProcessesCount(IModuleProcessInfo mpi)
 {
     if (mpi == null)
     {
         return(0);
     }
     return(Process.GetProcessesByName(mpi.ProcessName).Length);
 }
Example #6
0
 /// <summary>
 /// Initializes a new instance of RemoteCheckRequest
 /// </summary>
 /// <param name="moduleName">Module name</param>
 /// <param name="method">The method for shutdown the modules</param>
 /// <param name="mpi">Data about the program asociated to this module</param>
 public RemoteCheckRequest(string moduleName, IModuleProcessInfo mpi)
 {
     this.moduleName = moduleName;
     if (mpi != null)
     {
         this.processInfo = new ModuleProcessInfo(mpi.ProcessName, mpi.ProgramPath, mpi.ProgramArgs);
     }
 }
 /// <summary>
 /// Initializes a new instance of ModuleShutdownMethod
 /// </summary>
 /// <param name="moduleName">Module name</param>
 /// <param name="method">The method for shutdown the modules</param>
 /// <param name="mpi">Data about the program asociated to this module</param>
 public RemoteShutdownRequest(string moduleName, ModuleShutdownMethod method, IModuleProcessInfo mpi)
 {
     this.method     = method;
     this.moduleName = moduleName;
     if (mpi != null)
     {
         this.processInfo = new ModuleProcessInfo(mpi.ProcessName, mpi.ProgramPath, mpi.ProgramArgs);
     }
 }
Example #8
0
        /// <summary>
        /// Launches a process if it is not running
        /// </summary>
        /// <param name="mpi">The object which contains the information about the process to launch</param>
        public bool LaunchProcessIfNotRunning(IModuleProcessInfo mpi)
        {
            //ProcessStartInfo psi;
            //Process p;
            //Stopwatch sw;

            if (this.RunningProcessesCount(mpi) > 0)
            {
                Log.WriteLine(6, "Process '" + mpi.ProcessName + "' is already running");
                return(true);
            }

            return(this.LaunchProcess(mpi));
        }
Example #9
0
        /// <summary>
        /// Launches a process
        /// </summary>
        /// <param name="mpi">The object which contains the information about the process to launch</param>
        public bool LaunchProcess(IModuleProcessInfo mpi)
        {
            ProcessStartInfo psi;
            Process          p;
            Stopwatch        sw;

            if (!File.Exists(mpi.ProgramPath))
            {
                Log.WriteLine(5, "Can not start process '" + mpi.ProcessName + "': File not found.");
                return(false);
            }

            Log.WriteLine(6, "Starting process '" + mpi.ProcessName + "'...");
            try
            {
                psi = new ProcessStartInfo(mpi.ProgramPath, mpi.ProgramArgs);
                psi.WorkingDirectory = (new FileInfo(mpi.ProgramPath)).DirectoryName;
                psi.UseShellExecute  = true;
                psi.WindowStyle      = ProcessWindowStyle.Normal;
                p           = new Process();
                p.StartInfo = psi;
                if (!p.Start())
                {
                    Log.WriteLine(5, "Can not start process '" + mpi.ProcessName + "': Can not start program.");
                    return(false);
                }
                sw = new Stopwatch();
                sw.Start();
                while (sw.ElapsedMilliseconds < 10000)
                {
                    if (p.WaitForInputIdle(500))
                    {
                        Log.WriteLine(6, "Process '" + mpi.ProcessName + "' started.");
                        sw.Stop();
                        return(true);
                    }
                }
                sw.Stop();
                Log.WriteLine(5, "Starting process '" + mpi.ProcessName + "': timed out.");
            }
            catch (Exception ex)
            {
                Log.WriteLine(5, "Can not start process '" + mpi.ProcessName + "': " + ex.Message);
                return(false);
            }
            return(false);
        }
Example #10
0
        private void ProcKill(IModuleClientTcp module)
        {
            IModuleProcessInfo pi = module.ProcessInfo;

            if ((pi == null) || (String.IsNullOrEmpty(pi.ProcessName)))
            {
                WriteError("No process information found for module {0}", module);
                return;
            }

            Console.Write("Attempting to kill module {0}... ", module.Name);
            try
            {
                this.procMan.ShutdownModule(module, ModuleShutdownMethod.KillOnly);
                Console.WriteLine("Done!");
            }
            catch (Exception ex)
            {
                Console.WriteLine();
                WriteError("Failed: " + ex.Message);
            }
        }
Example #11
0
        private void ProcStart(IModuleClientTcp module)
        {
            IModuleProcessInfo pi = module.ProcessInfo;

            if ((pi == null) || String.IsNullOrEmpty(pi.ProgramPath))
            {
                WriteError("No process information found for module {0}", module);
                return;
            }

            Console.Write("Attempting to start module {0}... ", module.Name);
            try
            {
                this.procMan.LaunchModule(module, ModuleStartupMethod.LaunchAlways);
                Console.WriteLine("Done!");
            }
            catch (Exception ex)
            {
                Console.WriteLine();
                WriteError("Failed: " + ex.Message);
            }
        }
Example #12
0
        /// <summary>
        /// Request the operating system to close the main window all instances of a process
        /// </summary>
        /// <param name="mpi">The object which contains the information about the process to close</param>
        public bool CloseProcessWindow(IModuleProcessInfo mpi)
        {
            Process[] processesToEnd;
            Stopwatch sw;

            processesToEnd = Process.GetProcessesByName(mpi.ProcessName);
            if (processesToEnd.Length < 1)
            {
                return(true);
            }

            // Request close
            Log.WriteLine(6, "Stopping process '" + mpi.ProcessName + "'...");
            foreach (Process p in processesToEnd)
            {
                try
                {
                    p.CloseMainWindow();
                }
                catch { }
            }

            // Wait for processes to close
            sw = new Stopwatch();
            sw.Start();
            while (sw.ElapsedMilliseconds < 1000)
            {
                if (RunningProcessesCount(mpi) == 0)
                {
                    Log.WriteLine(6, "Stopping process '" + mpi.ProcessName + "' complete!");
                    sw.Stop();
                    return(true);
                }
                System.Threading.Thread.Sleep(100);
            }
            sw.Stop();
            return(false);
        }
        /// <summary>
        /// Request the operating system to close the main window all instances of a process
        /// </summary>
        /// <param name="mpi">The object which contains the information about the process to close</param>
        public bool CloseProcessWindow(IModuleProcessInfo mpi)
        {
            Process[] processesToEnd;
            Stopwatch sw;

            processesToEnd = Process.GetProcessesByName(mpi.ProcessName);
            if (processesToEnd.Length < 1)
                return true;

            // Request close
            Log.WriteLine(6, "Stopping process '" + mpi.ProcessName + "'...");
            foreach (Process p in processesToEnd)
            {
                try
                {
                    p.CloseMainWindow();
                }
                catch { }
            }

            // Wait for processes to close
            sw = new Stopwatch();
            sw.Start();
            while (sw.ElapsedMilliseconds < 1000)
            {
                if (RunningProcessesCount(mpi) == 0)
                {
                    Log.WriteLine(6, "Stopping process '" + mpi.ProcessName + "' complete!");
                    sw.Stop();
                    return true;
                }
                System.Threading.Thread.Sleep(100);
            }
            sw.Stop();
            return false;
        }
 /// <summary>
 /// Gets the number of processes running with the specified module process info
 /// </summary>
 /// <param name="mpi">The object which contains the information about the process to check</param>
 /// <returns>The number of runnin processes</returns>
 public int RunningProcessesCount(IModuleProcessInfo mpi)
 {
     if (mpi == null)
         return 0;
     return Process.GetProcessesByName(mpi.ProcessName).Length;
 }
        /// <summary>
        /// Launches a process if it is not running
        /// </summary>
        /// <param name="mpi">The object which contains the information about the process to launch</param>
        public bool LaunchProcessIfNotRunning(IModuleProcessInfo mpi)
        {
            //ProcessStartInfo psi;
            //Process p;
            //Stopwatch sw;

            if (this.RunningProcessesCount(mpi) > 0)
            {
                Log.WriteLine(6, "Process '" + mpi.ProcessName + "' is already running");
                return true;
            }

            return this.LaunchProcess(mpi);
        }
        /// <summary>
        /// Launches a process
        /// </summary>
        /// <param name="mpi">The object which contains the information about the process to launch</param>
        public bool LaunchProcess(IModuleProcessInfo mpi)
        {
            ProcessStartInfo psi;
            Process p;
            Stopwatch sw;

            if (!File.Exists(mpi.ProgramPath))
            {
                Log.WriteLine(5, "Can not start process '" + mpi.ProcessName + "': File not found.");
                return false;
            }

            Log.WriteLine(6, "Starting process '" + mpi.ProcessName + "'...");
            try
            {
                psi = new ProcessStartInfo(mpi.ProgramPath, mpi.ProgramArgs);
                psi.WorkingDirectory = (new FileInfo(mpi.ProgramPath)).DirectoryName;
                psi.UseShellExecute = true;
                psi.WindowStyle = ProcessWindowStyle.Normal;
                p = new Process();
                p.StartInfo = psi;
                if (!p.Start())
                {
                    Log.WriteLine(5, "Can not start process '" + mpi.ProcessName + "': Can not start program.");
                    return false;
                }
                sw = new Stopwatch();
                sw.Start();
                while (sw.ElapsedMilliseconds < 10000)
                {
                    if (p.WaitForInputIdle(500))
                    {
                        Log.WriteLine(6, "Process '" + mpi.ProcessName + "' started.");
                        sw.Stop();
                        return true;
                    }
                }
                sw.Stop();
                Log.WriteLine(5, "Starting process '" + mpi.ProcessName + "': timed out.");
            }
            catch (Exception ex)
            {
                Log.WriteLine(5, "Can not start process '" + mpi.ProcessName + "': " + ex.Message);
                return false;
            }
            return false;
        }
        /// <summary>
        /// Kills all instances of a process
        /// </summary>
        /// <param name="mpi">The object which contains the information about the process to kill</param>
        public bool KillProcess(IModuleProcessInfo mpi)
        {
            Process[] processesToKill;
            int tries = KILL_ATTEMPTS;

            processesToKill = Process.GetProcessesByName(mpi.ProcessName);
            if (processesToKill.Length < 1)
                return true;

            // Kill alive process
            Log.WriteLine(6, "Killing the process '" + mpi.ProcessName + "'...");

            do
            {
                foreach (Process p in processesToKill)
                {
                    try
                    {
                        p.Kill();
                        p.WaitForExit(500);
                    }
                    catch
                    {
                        Log.WriteLine(5, "Kill process '" + mpi.ProcessName + "' failed.");
                        return false;
                    }
                }
            } while ((RunningProcessesCount(mpi) > 0) && (tries-- > 0));
            return true;
        }
        /// <summary>
        /// Closes the main window of all instances of a process. If the window does not close, it Kills the process
        /// </summary>
        /// <param name="mpi">The object which contains the information about the process to kill</param>
        public bool CloseThenKillProcess(IModuleProcessInfo mpi)
        {
            Process[] processesToKill;
            Stopwatch sw;
            int tries = KILL_ATTEMPTS;

            processesToKill = Process.GetProcessesByName(mpi.ProcessName);
            if (processesToKill.Length < 1)
                return true;

            // Request close
            Log.WriteLine(6, "Stopping process '" + mpi.ProcessName + "'...");
            foreach (Process p in processesToKill)
            {
                try
                {
                    p.CloseMainWindow();
                }
                catch { }
            }

            // Wait for processes to close
            sw = new Stopwatch();
            sw.Start();
            while (sw.ElapsedMilliseconds < 1000)
            {
                processesToKill = Process.GetProcessesByName(mpi.ProcessName);
                if (processesToKill.Length == 0)
                {
                    Log.WriteLine(6, "Stopping process '" + mpi.ProcessName + "' complete!");
                    sw.Stop();
                    return true;
                }
                System.Threading.Thread.Sleep(100);
            }
            sw.Stop();

            // Kill alive process
            Log.WriteLine(6, "Stopping process '" + mpi.ProcessName + "' failed. Killing the process...");

            do
            {
                foreach (Process p in processesToKill)
                {
                    try
                    {
                        p.Kill();
                        p.WaitForExit(500);
                    }
                    catch
                    {
                        Log.WriteLine(5, "Kill process '" + mpi.ProcessName + "' failed.");
                        return false;
                    }
                }
            } while ((RunningProcessesCount(mpi) > 0) && (tries-- > 0));
            return true;
        }
 /// <summary>
 /// Initializes a new instance of RemoteCheckRequest
 /// </summary>
 /// <param name="moduleName">Module name</param>
 /// <param name="method">The method for shutdown the modules</param>
 /// <param name="mpi">Data about the program asociated to this module</param>
 public RemoteCheckRequest(string moduleName, IModuleProcessInfo mpi)
 {
     this.moduleName = moduleName;
     if(mpi != null)
         this.processInfo = new ModuleProcessInfo(mpi.ProcessName, mpi.ProgramPath, mpi.ProgramArgs);
 }