73 lines
2.1 KiB
C#
73 lines
2.1 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Security.Principal;
|
|
using System.ServiceProcess;
|
|
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;
|
|
}
|
|
}
|
|
} |