private void ShowProcesses(ClientRequestInfo requestInfo)
{
if (requestInfo.Request.Arguments.ContainsHelpRequest)
{
bool showAdvancedHelp = requestInfo.Request.Arguments.Exists("advanced");
StringBuilder helpMessage = new StringBuilder();
helpMessage.Append("Displays a list of defined service processes or running system processes.");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" Usage:");
helpMessage.AppendLine();
helpMessage.Append(" Processes -options");
helpMessage.AppendLine();
helpMessage.AppendLine();
helpMessage.Append(" Options:");
helpMessage.AppendLine();
helpMessage.Append(" -?".PadRight(20));
helpMessage.Append("Displays this help message");
if (m_supportSystemCommands && showAdvancedHelp)
{
helpMessage.AppendLine();
helpMessage.Append(" -system".PadRight(20));
helpMessage.Append("Displays system processes instead of service processes");
}
helpMessage.AppendLine();
helpMessage.AppendLine();
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, helpMessage.ToString());
}
else
{
bool listSystemProcesses = requestInfo.Request.Arguments.Exists("system");
if (listSystemProcesses && m_supportSystemCommands)
{
// Enumerate "system" processes when -system parameter is specified
StringBuilder responseMessage = new StringBuilder();
responseMessage.AppendFormat("Processes running on {0}:", Environment.MachineName);
responseMessage.AppendLine();
responseMessage.AppendLine();
responseMessage.Append("ID".PadRight(5));
responseMessage.Append(' ');
responseMessage.Append("Name".PadRight(25));
responseMessage.Append(' ');
responseMessage.Append("Priority".PadRight(15));
responseMessage.Append(' ');
responseMessage.Append("Responding".PadRight(10));
responseMessage.Append(' ');
responseMessage.Append("Start Time".PadRight(20));
responseMessage.AppendLine();
responseMessage.Append(new string('-', 5));
responseMessage.Append(' ');
responseMessage.Append(new string('-', 25));
responseMessage.Append(' ');
responseMessage.Append(new string('-', 15));
responseMessage.Append(' ');
responseMessage.Append(new string('-', 10));
responseMessage.Append(' ');
responseMessage.Append(new string('-', 20));
foreach (Process process in Process.GetProcesses())
{
try
{
responseMessage.Append(process.StartInfo.UserName);
responseMessage.AppendLine();
responseMessage.Append(process.Id.ToString().PadRight(5));
responseMessage.Append(' ');
responseMessage.Append(process.ProcessName.PadRight(25));
responseMessage.Append(' ');
#if MONO
responseMessage.Append("Undetermined".PadRight(15));
responseMessage.Append(' ');
responseMessage.Append("N/A".PadRight(10));
responseMessage.Append(' ');
#else
responseMessage.Append(process.PriorityClass.ToString().PadRight(15));
responseMessage.Append(' ');
responseMessage.Append((process.Responding ? "Yes" : "No").PadRight(10));
responseMessage.Append(' ');
#endif
responseMessage.Append(process.StartTime.ToString("MM/dd/yy hh:mm:ss tt").PadRight(20));
}
// ReSharper disable once EmptyGeneralCatchClause
catch
{ }
}
responseMessage.AppendLine();
responseMessage.AppendLine();
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, responseMessage.ToString());
}
else
{
if (m_processes.Count > 0)
{
// Display info about all the processes defined in the service.
StringBuilder responseMessage = new StringBuilder();
responseMessage.AppendFormat("Processes defined in {0}:", Name);
responseMessage.AppendLine();
responseMessage.AppendLine();
responseMessage.Append("Name".PadRight(20));
responseMessage.Append(' ');
responseMessage.Append("State".PadRight(15));
responseMessage.Append(' ');
responseMessage.Append("Last Exec. Start".PadRight(20));
responseMessage.Append(' ');
responseMessage.Append("Last Exec. Stop".PadRight(20));
responseMessage.AppendLine();
responseMessage.Append(new string('-', 20));
responseMessage.Append(' ');
responseMessage.Append(new string('-', 15));
responseMessage.Append(' ');
responseMessage.Append(new string('-', 20));
responseMessage.Append(' ');
responseMessage.Append(new string('-', 20));
lock (m_processes)
{
foreach (ServiceProcess process in m_processes)
{
responseMessage.AppendLine();
responseMessage.Append(process.Name.PadRight(20));
responseMessage.Append(' ');
responseMessage.Append(process.CurrentState.ToString().PadRight(15));
responseMessage.Append(' ');
if (process.ExecutionStartTime != DateTime.MinValue)
responseMessage.Append(process.ExecutionStartTime.ToString("MM/dd/yy hh:mm:ss tt").PadRight(20));
else
responseMessage.Append("[Not Executed]".PadRight(20));
responseMessage.Append(' ');
if (process.ExecutionStopTime != DateTime.MinValue)
{
responseMessage.Append(process.ExecutionStopTime.ToString("MM/dd/yy hh:mm:ss tt").PadRight(20));
}
else
{
if (process.ExecutionStartTime != DateTime.MinValue)
responseMessage.Append("[Executing]".PadRight(20));
else
responseMessage.Append("[Not Executed]".PadRight(20));
}
}
}
responseMessage.AppendLine();
responseMessage.AppendLine();
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, responseMessage.ToString());
}
else
{
// No processes defined in the service to be displayed.
UpdateStatus(requestInfo.Sender.ClientID, UpdateType.Information, "No processes are defined in {0}.\r\n\r\n", Name);
}
}
}
}