mirror of
https://github.com/lidarr/lidarr.git
synced 2025-07-16 10:03:51 -07:00
More NzbDrone.exe refactoring
This commit is contained in:
parent
f3ca3e97f9
commit
69ba365cd3
11 changed files with 324 additions and 176 deletions
|
@ -87,4 +87,9 @@
|
||||||
<Abbreviation Text="IIS" />
|
<Abbreviation Text="IIS" />
|
||||||
</Naming2>
|
</Naming2>
|
||||||
</CodeStyleSettings>
|
</CodeStyleSettings>
|
||||||
|
<Daemon.SolutionSettings>
|
||||||
|
<SkipFilesAndFolders>
|
||||||
|
<Item>43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD/d:Content</Item>
|
||||||
|
</SkipFilesAndFolders>
|
||||||
|
</Daemon.SolutionSettings>
|
||||||
</Configuration>
|
</Configuration>
|
129
NzbDrone/Application.cs
Normal file
129
NzbDrone/Application.cs
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Net;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Timers;
|
||||||
|
using NLog;
|
||||||
|
using NzbDrone.Providers;
|
||||||
|
|
||||||
|
namespace NzbDrone
|
||||||
|
{
|
||||||
|
internal class Application
|
||||||
|
{
|
||||||
|
private static readonly Logger Logger = LogManager.GetLogger("Application");
|
||||||
|
|
||||||
|
private readonly ConfigProvider _configProvider;
|
||||||
|
private readonly WebClient _webClient;
|
||||||
|
private readonly IISProvider _iisProvider;
|
||||||
|
private readonly ConsoleProvider _consoleProvider;
|
||||||
|
private readonly DebuggerProvider _debuggerProvider;
|
||||||
|
private readonly EnviromentProvider _enviromentProvider;
|
||||||
|
private readonly ProcessProvider _processProvider;
|
||||||
|
|
||||||
|
public Application(ConfigProvider configProvider, WebClient webClient, IISProvider iisProvider, ConsoleProvider consoleProvider,
|
||||||
|
DebuggerProvider debuggerProvider, EnviromentProvider enviromentProvider, ProcessProvider processProvider)
|
||||||
|
{
|
||||||
|
_configProvider = configProvider;
|
||||||
|
_webClient = webClient;
|
||||||
|
_iisProvider = iisProvider;
|
||||||
|
_consoleProvider = consoleProvider;
|
||||||
|
_debuggerProvider = debuggerProvider;
|
||||||
|
_enviromentProvider = enviromentProvider;
|
||||||
|
_processProvider = processProvider;
|
||||||
|
|
||||||
|
_configProvider.ConfigureNlog();
|
||||||
|
_configProvider.CreateDefaultConfigFile();
|
||||||
|
Logger.Info("Starting NZBDrone. Start-up Path:'{0}'", _configProvider.ApplicationRoot);
|
||||||
|
Thread.CurrentThread.Name = "Host";
|
||||||
|
|
||||||
|
AppDomain.CurrentDomain.UnhandledException += ((s, e) => AppDomainException(e));
|
||||||
|
|
||||||
|
AppDomain.CurrentDomain.ProcessExit += ProgramExited;
|
||||||
|
AppDomain.CurrentDomain.DomainUnload += ProgramExited;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Start()
|
||||||
|
{
|
||||||
|
_iisProvider.StopServer();
|
||||||
|
_iisProvider.StartServer();
|
||||||
|
|
||||||
|
_debuggerProvider.Attach();
|
||||||
|
|
||||||
|
var prioCheckTimer = new System.Timers.Timer(5000);
|
||||||
|
prioCheckTimer.Elapsed += EnsurePriority;
|
||||||
|
prioCheckTimer.Enabled = true;
|
||||||
|
|
||||||
|
if (_enviromentProvider.IsUserInteractive && _configProvider.LaunchBrowser)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Logger.Info("Starting default browser. {0}", _iisProvider.AppUrl);
|
||||||
|
_processProvider.Start(_iisProvider.AppUrl);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Logger.ErrorException("Failed to open URL in default browser.", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
_consoleProvider.WaitForClose();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_webClient.DownloadString(_iisProvider.AppUrl);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Logger.ErrorException("Failed to load home page.", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Stop()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void AppDomainException(object excepion)
|
||||||
|
{
|
||||||
|
Console.WriteLine("EPIC FAIL: {0}", excepion);
|
||||||
|
Logger.Fatal("EPIC FAIL: {0}", excepion);
|
||||||
|
|
||||||
|
#if RELEASE
|
||||||
|
new Client
|
||||||
|
{
|
||||||
|
ApiKey = "43BBF60A-EB2A-4C1C-B09E-422ADF637265",
|
||||||
|
ApplicationName = "NZBDrone",
|
||||||
|
CurrentException = excepion as Exception
|
||||||
|
}.Submit();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
internal void EnsurePriority(object sender, ElapsedEventArgs e)
|
||||||
|
{
|
||||||
|
var currentProcessId = _processProvider.GetCurrentProcessId();
|
||||||
|
if (_processProvider.GetProcessPriority(currentProcessId) != ProcessPriorityClass.Normal)
|
||||||
|
{
|
||||||
|
_processProvider.SetPriority(_processProvider.GetCurrentProcessId(), ProcessPriorityClass.Normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
var iisProcessPriority = _processProvider.GetProcessPriority(_iisProvider.IISProcessId);
|
||||||
|
if (iisProcessPriority != ProcessPriorityClass.Normal && iisProcessPriority != ProcessPriorityClass.AboveNormal)
|
||||||
|
{
|
||||||
|
_processProvider.SetPriority(_iisProvider.IISProcessId, ProcessPriorityClass.Normal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ProgramExited(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
_iisProvider.StopServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -67,6 +67,9 @@
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\Libraries\Exceptioneer.WindowsFormsClient.dll</HintPath>
|
<HintPath>..\Libraries\Exceptioneer.WindowsFormsClient.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="Ninject">
|
||||||
|
<HintPath>..\packages\Ninject.2.2.1.4\lib\net40-Full\Ninject.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="NLog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
<Reference Include="NLog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\Libraries\NLog.dll</HintPath>
|
<HintPath>..\Libraries\NLog.dll</HintPath>
|
||||||
|
@ -82,19 +85,25 @@
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="Application.cs" />
|
||||||
|
<Compile Include="Providers\ConsoleProvider.cs" />
|
||||||
|
<Compile Include="Providers\DebuggerProvider.cs" />
|
||||||
<Compile Include="Providers\EnviromentProvider.cs" />
|
<Compile Include="Providers\EnviromentProvider.cs" />
|
||||||
<Compile Include="NzbDroneService.cs">
|
<Compile Include="NzbDroneService.cs">
|
||||||
<SubType>Component</SubType>
|
<SubType>Component</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="ProcessAttacher.cs" />
|
<Compile Include="ProcessAttacher.cs" />
|
||||||
<Compile Include="Providers\ConfigProvider.cs" />
|
<Compile Include="Providers\ConfigProvider.cs" />
|
||||||
<Compile Include="Providers\IISControllerProvider.cs" />
|
<Compile Include="Providers\IISProvider.cs" />
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Providers\ProcessProvider.cs" />
|
||||||
<Compile Include="Providers\ServiceProvider.cs" />
|
<Compile Include="Providers\ServiceProvider.cs" />
|
||||||
|
<Compile Include="Providers\WebClientProvider.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="app.config" />
|
<None Include="app.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="NzbDrone.ico" />
|
<Content Include="NzbDrone.ico" />
|
||||||
|
|
|
@ -1,174 +1,30 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Net;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Timers;
|
|
||||||
using Exceptioneer.WindowsFormsClient;
|
|
||||||
using NLog;
|
using NLog;
|
||||||
using NzbDrone.Providers;
|
using Ninject;
|
||||||
|
|
||||||
namespace NzbDrone
|
namespace NzbDrone
|
||||||
{
|
{
|
||||||
internal static class Program
|
internal static class Program
|
||||||
{
|
{
|
||||||
private static readonly Logger Logger = LogManager.GetLogger("Application");
|
public static readonly StandardKernel Kernel = new StandardKernel();
|
||||||
|
|
||||||
static readonly ConfigProvider ConfigProvider = new ConfigProvider();
|
private static readonly Logger Logger = LogManager.GetLogger("Main");
|
||||||
static readonly IISControllerProvider IISController = new IISControllerProvider(ConfigProvider);
|
|
||||||
|
|
||||||
private static void Main()
|
private static void Main()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
Console.WriteLine("Starting Console.");
|
||||||
|
Kernel.Get<Application>().Start();
|
||||||
ConfigProvider.ConfigureNlog();
|
|
||||||
ConfigProvider.CreateDefaultConfigFile();
|
|
||||||
Logger.Info("Starting NZBDrone. Start-up Path:'{0}'", ConfigProvider.ApplicationRoot);
|
|
||||||
Thread.CurrentThread.Name = "Host";
|
|
||||||
|
|
||||||
Process currentProcess = Process.GetCurrentProcess();
|
|
||||||
|
|
||||||
var prioCheckTimer = new System.Timers.Timer(5000);
|
|
||||||
prioCheckTimer.Elapsed += prioCheckTimer_Elapsed;
|
|
||||||
prioCheckTimer.Enabled = true;
|
|
||||||
|
|
||||||
currentProcess.EnableRaisingEvents = true;
|
|
||||||
currentProcess.Exited += ProgramExited;
|
|
||||||
|
|
||||||
AppDomain.CurrentDomain.UnhandledException += ((s, e) => AppDomainException(e));
|
|
||||||
AppDomain.CurrentDomain.ProcessExit += ProgramExited;
|
|
||||||
AppDomain.CurrentDomain.DomainUnload += ProgramExited;
|
|
||||||
|
|
||||||
IISController.StopServer();
|
|
||||||
IISController.StartServer();
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
Attach();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!Environment.UserInteractive || !ConfigProvider.LaunchBrowser)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
new WebClient().DownloadString(IISController.AppUrl);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Logger.ErrorException("Failed to load home page.", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Logger.Info("Starting default browser. {0}", IISController.AppUrl);
|
|
||||||
Process.Start(IISController.AppUrl);
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Logger.ErrorException("Failed to open URL in default browser.", e);
|
|
||||||
}
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
Console.ReadLine();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
AppDomainException(e);
|
Console.WriteLine(e.ToString());
|
||||||
|
Logger.Fatal(e.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("Press enter to exit.");
|
Console.WriteLine("Press enter to exit.");
|
||||||
Console.ReadLine();
|
Console.ReadLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void prioCheckTimer_Elapsed(object sender, ElapsedEventArgs e)
|
|
||||||
{
|
|
||||||
Process currentProcess = Process.GetCurrentProcess();
|
|
||||||
if (currentProcess.PriorityClass != ProcessPriorityClass.Normal)
|
|
||||||
{
|
|
||||||
SetPriority(currentProcess);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (IISControllerProvider.IISProcess != null)
|
|
||||||
{
|
|
||||||
IISControllerProvider.IISProcess.Refresh();
|
|
||||||
|
|
||||||
if (IISControllerProvider.IISProcess.PriorityClass != ProcessPriorityClass.Normal && IISControllerProvider.IISProcess.PriorityClass != ProcessPriorityClass.AboveNormal)
|
|
||||||
{
|
|
||||||
SetPriority(IISControllerProvider.IISProcess);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void SetPriority(Process process)
|
|
||||||
{
|
|
||||||
Logger.Info("Updating [{0}] process priority from {1} to {2}",
|
|
||||||
process.ProcessName,
|
|
||||||
IISControllerProvider.IISProcess.PriorityClass,
|
|
||||||
ProcessPriorityClass.Normal);
|
|
||||||
process.PriorityClass = ProcessPriorityClass.Normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
private static void Attach()
|
|
||||||
{
|
|
||||||
if (Debugger.IsAttached)
|
|
||||||
{
|
|
||||||
Logger.Info("Trying to attach to debugger");
|
|
||||||
|
|
||||||
var count = 0;
|
|
||||||
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ProcessAttacher.Attach();
|
|
||||||
Logger.Info("Debugger Attached");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
count++;
|
|
||||||
if (count > 20)
|
|
||||||
{
|
|
||||||
Logger.WarnException("Unable to attach to debugger", e);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Thread.Sleep(100);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private static void AppDomainException(object excepion)
|
|
||||||
{
|
|
||||||
Console.WriteLine("EPIC FAIL: {0}", excepion);
|
|
||||||
Logger.Fatal("EPIC FAIL: {0}", excepion);
|
|
||||||
|
|
||||||
#if RELEASE
|
|
||||||
new Client
|
|
||||||
{
|
|
||||||
ApiKey = "43BBF60A-EB2A-4C1C-B09E-422ADF637265",
|
|
||||||
ApplicationName = "NZBDrone",
|
|
||||||
CurrentException = excepion as Exception
|
|
||||||
}.Submit();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
IISController.StopServer();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void ProgramExited(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
IISController.StopServer();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
18
NzbDrone/Providers/ConsoleProvider.cs
Normal file
18
NzbDrone/Providers/ConsoleProvider.cs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace NzbDrone.Providers
|
||||||
|
{
|
||||||
|
public class ConsoleProvider
|
||||||
|
{
|
||||||
|
public virtual void WaitForClose()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
Console.ReadLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
54
NzbDrone/Providers/DebuggerProvider.cs
Normal file
54
NzbDrone/Providers/DebuggerProvider.cs
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using NLog;
|
||||||
|
|
||||||
|
namespace NzbDrone.Providers
|
||||||
|
{
|
||||||
|
internal class DebuggerProvider
|
||||||
|
{
|
||||||
|
|
||||||
|
private static readonly Logger Logger = LogManager.GetLogger("DebuggerProvider");
|
||||||
|
|
||||||
|
|
||||||
|
internal virtual void Attach()
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
if (Debugger.IsAttached)
|
||||||
|
{
|
||||||
|
Logger.Info("Trying to attach to debugger");
|
||||||
|
|
||||||
|
var count = 0;
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ProcessAttacher.Attach();
|
||||||
|
Logger.Info("Debugger Attached");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
if (count > 20)
|
||||||
|
{
|
||||||
|
Logger.WarnException("Unable to attach to debugger", e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Thread.Sleep(100);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,11 +11,11 @@ using NLog;
|
||||||
|
|
||||||
namespace NzbDrone.Providers
|
namespace NzbDrone.Providers
|
||||||
{
|
{
|
||||||
internal class IISControllerProvider
|
internal class IISProvider
|
||||||
{
|
{
|
||||||
private readonly ConfigProvider _configProvider;
|
private readonly ConfigProvider _configProvider;
|
||||||
private static readonly Logger IISLogger = LogManager.GetLogger("IISExpress");
|
private static readonly Logger IISLogger = LogManager.GetLogger("IISExpress");
|
||||||
private static readonly Logger Logger = LogManager.GetLogger("IISControllerProvider");
|
private static readonly Logger Logger = LogManager.GetLogger("IISProvider");
|
||||||
|
|
||||||
private readonly string IISExe;
|
private readonly string IISExe;
|
||||||
private readonly string IISConfigPath;
|
private readonly string IISConfigPath;
|
||||||
|
@ -23,10 +23,10 @@ namespace NzbDrone.Providers
|
||||||
private static Timer _pingTimer;
|
private static Timer _pingTimer;
|
||||||
private static int _pingFailCounter;
|
private static int _pingFailCounter;
|
||||||
|
|
||||||
public static Process IISProcess { get; private set; }
|
private static Process _iisProcess;
|
||||||
|
|
||||||
|
|
||||||
public IISControllerProvider(ConfigProvider configProvider)
|
public IISProvider(ConfigProvider configProvider)
|
||||||
{
|
{
|
||||||
_configProvider = configProvider;
|
_configProvider = configProvider;
|
||||||
IISExe = Path.Combine(_configProvider.IISFolder, @"iisexpress.exe");
|
IISExe = Path.Combine(_configProvider.IISFolder, @"iisexpress.exe");
|
||||||
|
@ -38,27 +38,40 @@ namespace NzbDrone.Providers
|
||||||
get { return string.Format("http://localhost:{0}/", _configProvider.Port); }
|
get { return string.Format("http://localhost:{0}/", _configProvider.Port); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal int IISProcessId
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_iisProcess == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("IIS Process isn't running yet.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return _iisProcess.Id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal Process StartServer()
|
internal Process StartServer()
|
||||||
{
|
{
|
||||||
Logger.Info("Preparing IISExpress Server...");
|
Logger.Info("Preparing IISExpress Server...");
|
||||||
IISProcess = new Process();
|
_iisProcess = new Process();
|
||||||
|
|
||||||
IISProcess.StartInfo.FileName = IISExe;
|
_iisProcess.StartInfo.FileName = IISExe;
|
||||||
IISProcess.StartInfo.Arguments = String.Format("/config:\"{0}\" /trace:i", IISConfigPath);//"/config:"""" /trace:i";
|
_iisProcess.StartInfo.Arguments = String.Format("/config:\"{0}\" /trace:i", IISConfigPath);//"/config:"""" /trace:i";
|
||||||
IISProcess.StartInfo.WorkingDirectory = _configProvider.ApplicationRoot;
|
_iisProcess.StartInfo.WorkingDirectory = _configProvider.ApplicationRoot;
|
||||||
|
|
||||||
IISProcess.StartInfo.UseShellExecute = false;
|
_iisProcess.StartInfo.UseShellExecute = false;
|
||||||
IISProcess.StartInfo.RedirectStandardOutput = true;
|
_iisProcess.StartInfo.RedirectStandardOutput = true;
|
||||||
IISProcess.StartInfo.RedirectStandardError = true;
|
_iisProcess.StartInfo.RedirectStandardError = true;
|
||||||
IISProcess.StartInfo.CreateNoWindow = true;
|
_iisProcess.StartInfo.CreateNoWindow = true;
|
||||||
|
|
||||||
|
|
||||||
IISProcess.OutputDataReceived += (OnOutputDataReceived);
|
_iisProcess.OutputDataReceived += (OnOutputDataReceived);
|
||||||
IISProcess.ErrorDataReceived += (OnErrorDataReceived);
|
_iisProcess.ErrorDataReceived += (OnErrorDataReceived);
|
||||||
|
|
||||||
//Set Variables for the config file.
|
//Set Variables for the config file.
|
||||||
IISProcess.StartInfo.EnvironmentVariables.Add("NZBDRONE_PATH", _configProvider.ApplicationRoot);
|
_iisProcess.StartInfo.EnvironmentVariables.Add("NZBDRONE_PATH", _configProvider.ApplicationRoot);
|
||||||
IISProcess.StartInfo.EnvironmentVariables.Add("NZBDRONE_PID", Process.GetCurrentProcess().Id.ToString());
|
_iisProcess.StartInfo.EnvironmentVariables.Add("NZBDRONE_PID", Process.GetCurrentProcess().Id.ToString());
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -70,22 +83,22 @@ namespace NzbDrone.Providers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Logger.Info("Starting process. [{0}]", IISProcess.StartInfo.FileName);
|
Logger.Info("Starting process. [{0}]", _iisProcess.StartInfo.FileName);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IISProcess.Start();
|
_iisProcess.Start();
|
||||||
IISProcess.PriorityClass = ProcessPriorityClass.AboveNormal;
|
_iisProcess.PriorityClass = ProcessPriorityClass.AboveNormal;
|
||||||
|
|
||||||
IISProcess.BeginErrorReadLine();
|
_iisProcess.BeginErrorReadLine();
|
||||||
IISProcess.BeginOutputReadLine();
|
_iisProcess.BeginOutputReadLine();
|
||||||
|
|
||||||
//Start Ping
|
//Start Ping
|
||||||
_pingTimer = new Timer(300000) { AutoReset = true };
|
_pingTimer = new Timer(300000) { AutoReset = true };
|
||||||
_pingTimer.Elapsed += (PingServer);
|
_pingTimer.Elapsed += (PingServer);
|
||||||
_pingTimer.Start();
|
_pingTimer.Start();
|
||||||
|
|
||||||
return IISProcess;
|
return _iisProcess;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void OnErrorDataReceived(object sender, DataReceivedEventArgs e)
|
private static void OnErrorDataReceived(object sender, DataReceivedEventArgs e)
|
||||||
|
@ -98,7 +111,7 @@ namespace NzbDrone.Providers
|
||||||
|
|
||||||
internal void StopServer()
|
internal void StopServer()
|
||||||
{
|
{
|
||||||
KillProcess(IISProcess);
|
KillProcess(_iisProcess);
|
||||||
|
|
||||||
Logger.Info("Finding orphaned IIS Processes.");
|
Logger.Info("Finding orphaned IIS Processes.");
|
||||||
foreach (var process in Process.GetProcessesByName("IISExpress"))
|
foreach (var process in Process.GetProcessesByName("IISExpress"))
|
42
NzbDrone/Providers/ProcessProvider.cs
Normal file
42
NzbDrone/Providers/ProcessProvider.cs
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using NLog;
|
||||||
|
|
||||||
|
namespace NzbDrone.Providers
|
||||||
|
{
|
||||||
|
public class ProcessProvider
|
||||||
|
{
|
||||||
|
private static readonly Logger Logger = LogManager.GetLogger("ProcessProvider");
|
||||||
|
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual ProcessPriorityClass GetProcessPriority(int processId)
|
||||||
|
{
|
||||||
|
return Process.GetProcessById(processId).PriorityClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual int GetCurrentProcessId()
|
||||||
|
{
|
||||||
|
return Process.GetCurrentProcess().Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual Process Start(string path)
|
||||||
|
{
|
||||||
|
return Process.Start(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
17
NzbDrone/Providers/WebClientProvider.cs
Normal file
17
NzbDrone/Providers/WebClientProvider.cs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace NzbDrone.Providers
|
||||||
|
{
|
||||||
|
internal class WebClientProvider
|
||||||
|
{
|
||||||
|
|
||||||
|
public virtual string DownloadString(string url)
|
||||||
|
{
|
||||||
|
return new WebClient().DownloadString(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
4
NzbDrone/packages.config
Normal file
4
NzbDrone/packages.config
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Ninject" version="2.2.1.4" />
|
||||||
|
</packages>
|
|
@ -4,4 +4,5 @@
|
||||||
<repository path="..\NzbDrone.Core.Test\packages.config" />
|
<repository path="..\NzbDrone.Core.Test\packages.config" />
|
||||||
<repository path="..\NzbDrone.Core\packages.config" />
|
<repository path="..\NzbDrone.Core\packages.config" />
|
||||||
<repository path="..\NzbDrone.App.Test\packages.config" />
|
<repository path="..\NzbDrone.App.Test\packages.config" />
|
||||||
|
<repository path="..\NzbDrone\packages.config" />
|
||||||
</repositories>
|
</repositories>
|
Loading…
Add table
Add a link
Reference in a new issue