private static bool internalParse(string[] args, out ProgramArguments arguments, out Exception exception) { arguments = null; exception = null; if (args.Length > 3) { return false; } else { ProgramArguments programArguments = new ProgramArguments(); IList<String> keywords = new List<String>(); foreach (String arg in args) { if (keywords.Contains(arg)) { exception = new Exception(String.Format("Duplicate argument '{0}' found.", arg)); return false; // Duplicate argument. } else { if (arg.Equals("--allow-multiple-instances")) { programArguments.AllowMultipleInstances = true; } else if (arg.Equals("--ignore-registering-at-windows-startup")) { programArguments.IgnoreRegisteringAtWindowsStartup = true; } else if (arg.Equals("--cleanup-update")) { programArguments.CleanupUpdate = true; } else { exception = new Exception(String.Format("Unknown argument '{0}' found.", arg)); return false; // Unknown argument. } keywords.Add(arg); } } arguments = programArguments; return true; } }
static void internalMain(string[] args) { bool success = ProgramArguments.TryParse(args, out arguments); if (!success) { arguments = new ProgramArguments(); // Get a new instance with default values. } if (arguments.CleanupUpdate || EnvironmentUtils.IsMonoRuntime()) { if (!EnvironmentUtils.IsMonoRuntime()) { // Wait one second to allow the other instance to exit. Thread.Sleep(1000); } // Remove the old executable file. if (File.Exists(String.Format("{0}.tmp", AssemblyUtils.GetApplicationPath()))) { File.Delete(String.Format("{0}.tmp", AssemblyUtils.GetApplicationPath())); } } if (!arguments.AllowMultipleInstances) { var assembly = typeof(Program).Assembly; GuidAttribute guidAttribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0]; bool applicationInstanceIsNotRunning; mutex = new Mutex(false, String.Format("{0}{1}", Application.ProductName, guidAttribute.Value), out applicationInstanceIsNotRunning); if (!applicationInstanceIsNotRunning) { MessageBox.Show(String.Format("An instance of this program is already running."), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } // Load settings. String settingsFilePath = String.Format("{0}{1}{2}", Path.GetDirectoryName(new Uri(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).LocalPath), Path.DirectorySeparatorChar, Program.SettingsFileName); try { if (!File.Exists(settingsFilePath)) { try { XMLSettings.CreateFile(settingsFilePath); } catch (Exception createSettingsFileException) { MessageBox.Show(String.Format("Cannot create settings file {0}.\n\nError details: {1}", settingsFilePath, createSettingsFileException.Message), "uRADMonitorX", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } settings = XMLSettings.LoadFromFile(settingsFilePath); // Fixes an issue with data log directory name on Linux due to trailing slash. settings.DataLogDirectoryPath = settings.DataLogDirectoryPath.TrimEnd('\\'); settings.Commit(); } catch (Exception loadSettingsFileException) { MessageBox.Show(String.Format("Cannot load settings from file {0}.\n\nError details: {1}", settingsFilePath, loadSettingsFileException.Message), "uRADMonitorX", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var loggerFilePath = getLoggerPath(settings.LogDirectoryPath, Program.LoggerFileName, false); var dataLoggerFilePath = getLoggerPath(settings.DataLoggingToSeparateFile ? settings.DataLogDirectoryPath : settings.LogDirectoryPath, Program.DataLoggerFileName, settings.IsLoggingEnabled && settings.IsDataLoggingEnabled && settings.DataLoggingToSeparateFile); LoggerManager.GetInstance().Add(Program.LoggerName, new ThreadSafeLogger( new Logger( new ReconfigurableFileAppender(loggerFilePath), new DateTimeFormatter() ) { Enabled = settings.IsLoggingEnabled } )); LoggerManager.GetInstance().Add(Program.DataLoggerName, new ThreadSafeLogger( new Logger( new NLogDailyFileAppender(dataLoggerFilePath), new DateTimeFormatter() ) { Enabled = settings.IsLoggingEnabled && settings.IsDataLoggingEnabled && settings.DataLoggingToSeparateFile } )); logger = LoggerManager.GetInstance().GetLogger(Program.LoggerName); IDeviceDataReaderFactory deviceDataReaderFactory = new DeviceDataHttpReaderFactory(settings); if (!arguments.IgnoreRegisteringAtWindowsStartup && !EnvironmentUtils.IsUnix()) { registerAtWindowsStartup(); } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); FormMain formMain = new FormMain(deviceDataReaderFactory, settings, logger); formMain.SettingsChangedEventHandler += new SettingsChangedEventHandler(formMain_SettingsChangedEventHandler); Application.Run(formMain); }
public static bool TryParse(string[] args, out ProgramArguments arguments) { Exception exception = null; return internalParse(args, out arguments, out exception); }