/// /// Copyright (c) 2015 Sensus Metering Systems /// using System; using System.IO; using System.Collections.Generic; using System.Windows.Forms; using log4net; using Config.Entities; using ResultsBrowser.Forms; namespace ResultsBrowser { public class Program { public const string HomeDir = "C:\\Tbf\\"; /// Contains subdirectories Results, Logs, Images, ... /// log4net static readonly ILog log = LogManager.GetLogger(typeof(Program)); const string log4netConfigFName = "log4netConfig.xml"; /// Local settings public static LocalSettings LocalSettings; public const string LocalSettingsFileName = "ResultsBrowser.xml"; public const string LocalSettingsBackupName = "ResultsBrowser.backup.xml"; public static System.Globalization.CultureInfo AltCulture; /// /// Main window object. /// public static MainWnd MainWnd; public static RBrowserWnd RBrowserWnd; /// /// The main entry point for the application. /// [STAThread] static void Main() { log.Fatal("--------------------------------------------------------------------------------"); /// Local program configuration directory including the trailing backslash string locAppDataDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + Path.DirectorySeparatorChar + "TestBenchFramework" + Path.DirectorySeparatorChar; /// Check whether local application data directory exists. /// If not, create it and copy the initial configuration to this directory. /// This is done only once after a clean program installation on the first program start-up try { if (!Directory.Exists(locAppDataDir)) { Directory.CreateDirectory(locAppDataDir); Environment.CurrentDirectory = locAppDataDir; string sampleConfig = Application.StartupPath + Path.DirectorySeparatorChar + "SampleConfig" + Path.DirectorySeparatorChar; if (File.Exists(sampleConfig + LocalSettingsFileName)) { File.Copy(sampleConfig + LocalSettingsFileName, LocalSettingsFileName); } if (File.Exists(sampleConfig + log4netConfigFName)) { File.Copy(sampleConfig + log4netConfigFName, log4netConfigFName); } if (File.Exists(sampleConfig + Config.Data.SQLiteDbFName)) { File.Copy(sampleConfig + Config.Data.SQLiteDbFName, Config.Data.SQLiteDbFName); } File.SetAttributes(LocalSettingsFileName, FileAttributes.Normal); File.SetAttributes(log4netConfigFName, FileAttributes.Normal); File.SetAttributes(Config.Data.SQLiteDbFName, FileAttributes.Normal); } else { Environment.CurrentDirectory = locAppDataDir; } } catch (Exception e) { log.Error("A problem when creating the local application data directory and preparing the initial configuration", e); return; } /// Configue and start logging log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(locAppDataDir + log4netConfigFName)); log.Info("Entering application."); /// /// Load the local settings /// LocalSettings = LocalSettings.Load(Program.LocalSettingsFileName); if (LocalSettings == null) { /// Loading local seetings from regular config file failed. Use the backup LocalSettings = LocalSettings.Load(Program.LocalSettingsBackupName); if (LocalSettings == null) { if (MessageBox.Show("No program settings found. Do you want to use default settings?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } /// Create new default settings and save them LocalSettings = new LocalSettings(); LocalSettings.Save(); } else { LocalSettings.Save(); /// Save the settings to overwrite the wrong file } } else { /// Loading local seetings from the regular config file was successful. Update the backup File.Copy(Program.LocalSettingsFileName, Program.LocalSettingsBackupName, true); } try { string culture = LocalSettings.Language.Replace('_', '-'); System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture); } catch (Exception e) { string msg = e.Message; MessageBox.Show("Selected language not supported.\nUsing English.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en"); } //AltCulture = null; AltCulture = new System.Globalization.CultureInfo("SK"); /// This belongs to Application.Run(new MainWnd()) ... /// and should be executed before opening 'loginDlg' Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { /// Open the main application window log.Info("Creating the main window"); #if IPERLST MainWnd = new MainWnd(); log.Info("Opening the main window"); Application.Run(MainWnd); #else RBrowserWnd = new RBrowserWnd(); log.Info("Opening the main window"); Application.Run(RBrowserWnd); #endif log.Info("The main window was closed"); } catch (Exception e) { LogException(log, "Exception in Application.Run(MainWnd)", e); } finally { /// Save local settings LocalSettings.Save(); } /// Close Fluent NHibernate /// Todo log.Info("Exiting application."); } static void MyHandler(object sender, UnhandledExceptionEventArgs args) { LogException(log, "Unhandled exception", (Exception)args.ExceptionObject); } static void LogException(ILog log, string description, Exception e) { log.FatalFormat("---------------( {0} )---------------", description); log.FatalFormat("Message : {0}", e.Message); if (e.InnerException != null) { log.FatalFormat("InnerMessage : {0}", e.InnerException.Message); } log.FatalFormat("StackTrace : {0}{1}", Environment.NewLine, e.StackTrace); log.Fatal("--------------------------------------"); } } }