Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 public static bool TryParse(string[] args, out ProgramArguments arguments)
 {
     Exception exception = null;
     return internalParse(args, out arguments, out exception);
 }