/// <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); }
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); }
/// <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> /// 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> /// 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); } }
/// <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); }
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); } }
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); } }
/// <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); }