sonarr-repo-only/NzbDrone.Common/EnvironmentInfo/RuntimeInfo.cs

72 lines
2.0 KiB
C#

using System;
using System.Diagnostics;
using System.IO;
using System.Security.Principal;
using NLog;
namespace NzbDrone.Common.EnvironmentInfo
{
public interface IRuntimeInfo
{
bool IsUserInteractive { get; }
bool IsAdmin { get; }
}
public class RuntimeInfo : IRuntimeInfo
{
private readonly Logger _logger;
public RuntimeInfo(Logger logger)
{
_logger = logger;
}
public bool IsUserInteractive
{
get { return Environment.UserInteractive; }
}
static RuntimeInfo()
{
IsProduction = InternalIsProduction();
}
public bool IsAdmin
{
get
{
try
{
var principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch (Exception ex)
{
_logger.WarnException("Error checking if the current user is an administrator.", ex);
return false;
}
}
}
private static readonly string ProcessName = Process.GetCurrentProcess().ProcessName.ToLower();
public static bool IsProduction { get; private set; }
private static bool InternalIsProduction()
{
if (BuildInfo.IsDebug || Debugger.IsAttached) return false;
if (BuildInfo.Version.Revision > 10000) return false; //Official builds will never have such a high revision
var lowerProcessName = ProcessName.ToLower();
if (lowerProcessName.Contains("vshost")) return false;
if (lowerProcessName.Contains("nunit")) return false;
if (lowerProcessName.Contains("jetbrain")) return false;
if (lowerProcessName.Contains("resharper")) return false;
if (Directory.GetCurrentDirectory().ToLower().Contains("teamcity")) return false;
return true;
}
}
}