using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; using System.Threading.Tasks; using MarketDataLib.Utility; using MarketData.Utils; using System.Diagnostics; using System.Security; namespace Watchdog { // This is just a helper app for building and testing stuff for the service public class ManagedProcess { public ManagedProcess(string name, string pathToExecutable,bool runAs) { this.Name=name; this.PathToExecutable=pathToExecutable; this.RunAs=runAs; } public String Name{get;set;} public String PathToExecutable{get;set;} public bool RunAs{get;set;} public bool IsRunning() { Process[] pname = Process.GetProcessesByName(Name); if (pname.Length == 0)return false; return true; } public bool Run() { ProcessStartInfo processStartInfo=new ProcessStartInfo(); processStartInfo.FileName=PathToExecutable; processStartInfo.WorkingDirectory=Utility.GetPath(processStartInfo.FileName); processStartInfo.UseShellExecute=true; if(RunAs)processStartInfo.Verb="runas"; processStartInfo.Domain=""; Process process = Process.Start(processStartInfo); if(null == process)return false; if(process.HasExited)return false; return true; } } public class ProcessManager { private ProcessManager() { } public static void ManageProcesses(List processList) { foreach(ManagedProcess managedProcess in processList) { if(!managedProcess.IsRunning()) { managedProcess.Run(); } } } public static void ManageProcesses(List processList,EventLog eventLog) { foreach(ManagedProcess managedProcess in processList) { if(!managedProcess.IsRunning()) { bool success=false; try { success=managedProcess.Run(); } catch(Exception exception) { eventLog.WriteEntry(String.Format("Exception attempting to start {0}. Exception was {1}",managedProcess.Name,exception.ToString())); } eventLog.WriteEntry(String.Format("Process '{0}' was started with {1}",managedProcess.Name,success?"success":"failure")); } else { eventLog.WriteEntry(String.Format("Process '{0}' is running",managedProcess.Name)); } } } public static List GetManagedProceses() { List managedProcessList=new List(); try { int watchCount=int.Parse(ConfigurationManager.AppSettings["watchcount"]); for(int index=0;index(),nvpDictionary["Executable"].Get(),nvpDictionary["RunAs"].Get()); managedProcessList.Add(managedProcess); } return managedProcessList; } catch(Exception exception) { String message=exception.InnerException.Message; throw; } } } }