You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Lidarr/src/NzbDrone.Update/UpdateEngine/TerminateNzbDrone.cs

65 lines
2.1 KiB

using System;
using NLog;
using NzbDrone.Common;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Processes;
using IServiceProvider = NzbDrone.Common.IServiceProvider;
namespace NzbDrone.Update.UpdateEngine
{
public interface ITerminateNzbDrone
{
void Terminate(int processId);
}
public class TerminateNzbDrone : ITerminateNzbDrone
{
private readonly IServiceProvider _serviceProvider;
private readonly IProcessProvider _processProvider;
private readonly Logger _logger;
public TerminateNzbDrone(IServiceProvider serviceProvider, IProcessProvider processProvider, Logger logger)
{
_serviceProvider = serviceProvider;
_processProvider = processProvider;
_logger = logger;
}
public void Terminate(int processId)
{
if (OsInfo.IsWindows)
{
_logger.Info("Stopping all running services");
if (_serviceProvider.ServiceExist(ServiceProvider.SERVICE_NAME)
&& _serviceProvider.IsServiceRunning(ServiceProvider.SERVICE_NAME))
{
try
{
_logger.Info("NzbDrone Service is installed and running");
_serviceProvider.Stop(ServiceProvider.SERVICE_NAME);
}
catch (Exception e)
{
_logger.Error(e, "couldn't stop service");
}
}
_logger.Info("Killing all running processes");
_processProvider.KillAll(ProcessProvider.LIDARR_CONSOLE_PROCESS_NAME);
_processProvider.KillAll(ProcessProvider.LIDARR_PROCESS_NAME);
}
else
{
_logger.Info("Killing all running processes");
_processProvider.KillAll(ProcessProvider.LIDARR_CONSOLE_PROCESS_NAME);
_processProvider.KillAll(ProcessProvider.LIDARR_PROCESS_NAME);
_processProvider.Kill(processId);
}
}
}
}