public static void Main(string[] args) { if (File.Exists(Settings.Instance.AppDataPath + "log4net")) { // load settings from file XmlConfigurator.Configure(new FileInfo(Settings.Instance.AppDataPath + "log4net")); } else { // build our own, who logs only fatals to console Logger root = ((Hierarchy) LogManager.GetRepository()).Root; var lAppender = new ConsoleAppender { Name = "Console", Layout = new PatternLayout("%date{dd-MM-yyyy HH:mm:ss,fff} %5level [%2thread] %line:%logger.%message%n"), Threshold = Level.Fatal }; lAppender.ActivateOptions(); root.AddAppender(lAppender); root.Repository.Configured = true; } #if !WINDOWS PlatformID id = Environment.OSVersion.Platform; // Don't allow running as root on Linux or Mac if ((id == PlatformID.Unix || id == PlatformID.MacOSX) && new UnixUserInfo (UnixEnvironment.UserName).UserId == 0) { LogManager.GetLogger(typeof(Main)).Fatal("Sorry, you can't run XG with these permissions. Safety first!"); Environment.Exit (-1); } #endif var instance = new Main(); ABackendPlugin backend; if (Settings.Instance.UseMySqlBackend) { backend = new BackendPlugin(); } else { backend = new Plugin.Backend.File.BackendPlugin(); } instance.AddBackendPlugin(backend); if (Settings.Instance.UseWebServer) { instance.AddWorker(new Plugin.General.Webserver.Plugin()); } if (Settings.Instance.UseJabberClient) { instance.AddWorker(new Plugin.General.Jabber.Plugin()); } instance.Start(); string shutdownFile = Settings.Instance.AppDataPath + "shutdown"; while (true) { if (File.Exists(shutdownFile)) { try { File.Delete(shutdownFile); } catch (Exception ex) { LogManager.GetLogger(typeof (Main)).Fatal("Cant delete shutdown file", ex); } instance.Stop(); break; } Thread.Sleep(1000); } Environment.Exit(0); }