mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-20 13:33:34 -07:00
Added NzbDrone.Update, refactored some common wrappers to NzbDrone.Common
This commit is contained in:
parent
7563527eac
commit
fb0b505bf4
42 changed files with 1316 additions and 97 deletions
87
NzbDrone.Common/ProcessProvider.cs
Normal file
87
NzbDrone.Common/ProcessProvider.cs
Normal file
|
@ -0,0 +1,87 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common.Model;
|
||||
|
||||
namespace NzbDrone.Common
|
||||
{
|
||||
public class ProcessProvider
|
||||
{
|
||||
private static readonly Logger Logger = LogManager.GetLogger("Host.ProcessProvider");
|
||||
|
||||
|
||||
public virtual ProcessInfo GetCurrentProcess()
|
||||
{
|
||||
return ConvertToProcessInfo(Process.GetCurrentProcess());
|
||||
}
|
||||
|
||||
public virtual ProcessInfo GetProcessById(int id)
|
||||
{
|
||||
return ConvertToProcessInfo(Process.GetProcesses().Where(p => p.Id == id).FirstOrDefault());
|
||||
}
|
||||
|
||||
public virtual IEnumerable<ProcessInfo> GetProcessByName(string name)
|
||||
{
|
||||
return Process.GetProcessesByName(name).Select(ConvertToProcessInfo);
|
||||
}
|
||||
|
||||
public virtual void Start(string path)
|
||||
{
|
||||
Process.Start(path);
|
||||
}
|
||||
|
||||
public virtual Process Start(ProcessStartInfo startInfo)
|
||||
{
|
||||
Logger.Info("Starting process. [{0}]", startInfo.FileName);
|
||||
|
||||
var process = new Process
|
||||
{
|
||||
StartInfo = startInfo
|
||||
};
|
||||
process.Start();
|
||||
return process;
|
||||
}
|
||||
|
||||
public virtual void Kill(int processId)
|
||||
{
|
||||
if (processId == 0) return;
|
||||
if (!Process.GetProcesses().Any(p => p.Id == processId)) return;
|
||||
|
||||
var process = Process.GetProcessById(processId);
|
||||
|
||||
if (!process.HasExited)
|
||||
{
|
||||
Logger.Info("[{0}]Killing process", process.Id);
|
||||
process.Kill();
|
||||
Logger.Info("[{0}]Waiting for exit", process.Id);
|
||||
process.WaitForExit();
|
||||
Logger.Info("[{0}]Process terminated successfully", process.Id);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void SetPriority(int processId, ProcessPriorityClass priority)
|
||||
{
|
||||
var process = Process.GetProcessById(processId);
|
||||
|
||||
Logger.Info("Updating [{0}] process priority from {1} to {2}",
|
||||
process.ProcessName,
|
||||
process.PriorityClass,
|
||||
priority);
|
||||
|
||||
process.PriorityClass = priority;
|
||||
}
|
||||
|
||||
private static ProcessInfo ConvertToProcessInfo(Process process)
|
||||
{
|
||||
if (process == null || process.Id <= 0) return null;
|
||||
|
||||
return new ProcessInfo
|
||||
{
|
||||
Id = process.Id,
|
||||
Priority = process.PriorityClass,
|
||||
StartPath = process.MainModule.FileName
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue