mirror of https://github.com/winsw/winsw
Add 'dev ps -a|--all' option
parent
1996edc6b4
commit
27d6d7ff7d
|
@ -292,11 +292,13 @@ namespace WinSW
|
||||||
{
|
{
|
||||||
var ps = new Command("ps", "Draws the process tree associated with the service.")
|
var ps = new Command("ps", "Draws the process tree associated with the service.")
|
||||||
{
|
{
|
||||||
Handler = CommandHandler.Create<string?>(DevPs),
|
Handler = CommandHandler.Create<string?, bool>(DevPs),
|
||||||
};
|
};
|
||||||
|
|
||||||
ps.Add(config);
|
ps.Add(config);
|
||||||
|
|
||||||
|
ps.Add(new Option(new[] { "--all", "-a" }));
|
||||||
|
|
||||||
dev.Add(ps);
|
dev.Add(ps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -863,7 +865,47 @@ namespace WinSW
|
||||||
DoRefresh(config);
|
DoRefresh(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DevPs(string? pathToConfig)
|
static unsafe void DevPs(string? pathToConfig, bool all)
|
||||||
|
{
|
||||||
|
if (all)
|
||||||
|
{
|
||||||
|
using var scm = ServiceManager.Open(ServiceManagerAccess.EnumerateService);
|
||||||
|
(IntPtr services, int count) = scm.EnumerateServices();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int prevProcessId = -1;
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
var status = (ENUM_SERVICE_STATUS*)services + i;
|
||||||
|
using var sc = scm.OpenService(status->ServiceName, ServiceAccess.QueryConfig | ServiceAccess.QueryStatus);
|
||||||
|
if (sc.ExecutablePath.StartsWith($"\"{ExecutablePath}\""))
|
||||||
|
{
|
||||||
|
int processId = sc.ProcessId;
|
||||||
|
if (processId >= 0)
|
||||||
|
{
|
||||||
|
if (prevProcessId >= 0)
|
||||||
|
{
|
||||||
|
using Process process = Process.GetProcessById(prevProcessId);
|
||||||
|
Draw(process, string.Empty, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
prevProcessId = processId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prevProcessId >= 0)
|
||||||
|
{
|
||||||
|
using Process process = Process.GetProcessById(prevProcessId);
|
||||||
|
Draw(process, string.Empty, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Marshal.FreeHGlobal(services);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
XmlServiceConfig config = LoadConfig(pathToConfig);
|
XmlServiceConfig config = LoadConfig(pathToConfig);
|
||||||
|
|
||||||
|
@ -872,17 +914,19 @@ namespace WinSW
|
||||||
|
|
||||||
int processId = sc.ProcessId;
|
int processId = sc.ProcessId;
|
||||||
if (processId >= 0)
|
if (processId >= 0)
|
||||||
|
{
|
||||||
|
using Process process = Process.GetProcessById(processId);
|
||||||
|
Draw(process, string.Empty, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Draw(Process process, string indentation, bool isLastChild)
|
||||||
{
|
{
|
||||||
const string Vertical = " \u2502 ";
|
const string Vertical = " \u2502 ";
|
||||||
const string Corner = " \u2514\u2500";
|
const string Corner = " \u2514\u2500";
|
||||||
const string Cross = " \u251c\u2500";
|
const string Cross = " \u251c\u2500";
|
||||||
const string Space = " ";
|
const string Space = " ";
|
||||||
|
|
||||||
using Process process = Process.GetProcessById(processId);
|
|
||||||
Draw(process, string.Empty, true);
|
|
||||||
|
|
||||||
static void Draw(Process process, string indentation, bool isLastChild)
|
|
||||||
{
|
|
||||||
Console.Write(indentation);
|
Console.Write(indentation);
|
||||||
|
|
||||||
if (isLastChild)
|
if (isLastChild)
|
||||||
|
@ -907,7 +951,6 @@ namespace WinSW
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void DevKill(string? pathToConfig, bool noElevate)
|
void DevKill(string? pathToConfig, bool noElevate)
|
||||||
{
|
{
|
||||||
|
@ -939,7 +982,7 @@ namespace WinSW
|
||||||
{
|
{
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
var status = (ServiceApis.ENUM_SERVICE_STATUS*)services + i;
|
var status = (ENUM_SERVICE_STATUS*)services + i;
|
||||||
using var sc = scm.OpenService(status->ServiceName, ServiceAccess.QueryConfig);
|
using var sc = scm.OpenService(status->ServiceName, ServiceAccess.QueryConfig);
|
||||||
if (sc.ExecutablePath.StartsWith($"\"{ExecutablePath}\""))
|
if (sc.ExecutablePath.StartsWith($"\"{ExecutablePath}\""))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue