From dbc4646d66c22e449b9f67e7e4dcf0ab10a9ff97 Mon Sep 17 00:00:00 2001 From: NextTurn <45985406+NextTurn@users.noreply.github.com> Date: Sat, 8 Aug 2020 00:00:00 +0800 Subject: [PATCH] Add `dev kill` command --- src/WinSW/Program.cs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/WinSW/Program.cs b/src/WinSW/Program.cs index aedb3fd..f043174 100644 --- a/src/WinSW/Program.cs +++ b/src/WinSW/Program.cs @@ -285,6 +285,13 @@ namespace WinSW }; dev.Add(ps); + + var kill = new Command("kill", "Terminates the service if it has stopped responding.") + { + Handler = CommandHandler.Create(DevKill), + }; + + dev.Add(kill); } return new CommandLineBuilder(root) @@ -909,6 +916,28 @@ namespace WinSW } } + void DevKill(string? pathToConfig, bool noElevate) + { + XmlServiceConfig config = CreateConfig(pathToConfig); + + if (!elevated) + { + Elevate(noElevate); + return; + } + + using ServiceManager scm = ServiceManager.Open(); + using Service sc = scm.OpenService(config.Name); + + int processId = sc.ProcessId; + if (processId >= 0) + { + using Process process = Process.GetProcessById(processId); + + process.StopDescendants(config.StopTimeoutInMs); + } + } + static void Customize(string output, string manufacturer) { if (Resources.UpdateCompanyName(ExecutablePath, output, manufacturer))