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 ;
}
}
}