public MainForm()
        {
            InitializeComponent();

            Logging.FormOutputControl    = tbOutput;
            SQLHelper.LogExceptionAction = Logging.LogExceptionMessage;
            ProcessingToggle             = new Toggle(ActivationBehavior, DeactivationBehavior);

            panelYara.Enabled = checkBoxYaraRules.Checked;

            string connectionString = Settings.Database_ConnectionString;

            if (string.IsNullOrWhiteSpace(connectionString) || connectionString == "SetMe")
            {
                Logging.ReportOutput("ERROR: Connection string not set! Please set the SQL connection string in .config file. Browse button disabled.");
                btnBrowse.Enabled = false;
            }
            else
            {
                FilePropertiesAccessLayer.SetConnectionString(connectionString);
            }

            if (!string.IsNullOrWhiteSpace(Settings.GUI_DefaultFolder))
            {
                tbPath.Text = Settings.GUI_DefaultFolder;
            }

            if (!string.IsNullOrWhiteSpace(Settings.GUI_SearchPattern))
            {
                tbSearchPatterns.Text = Settings.GUI_SearchPattern;
            }
        }
        private static void Main(string[] args)
        {
            string connectionString = Settings.Database_ConnectionString;

            if (string.IsNullOrWhiteSpace(connectionString) || connectionString == "SetMe")
            {
                ReportOutput("ERROR: Connection string not set! Please set the SQL connection string in .config file.");
                ReportOutput("Aborting...");
                return;
            }
            else
            {
                FilePropertiesAccessLayer.SetConnectionString(connectionString);
            }

            if (args.Length == 0)
            {
                DisplayUsageSyntax();
                return;
            }

            // Will hold flag & parameter to flag, such as: "-p", "C:\Windows\"
            List <Tuple <string, string> > flags = GetFlags(args);

            if (!flags.Any())
            {
                return;
            }

            string searchPath       = "";
            string searchMask       = "*.*";
            bool   calcEntropy      = false;
            bool   onlineValidation = false;
            string yaraRulesFile    = "";

            foreach (Tuple <string, string> flagTuple in flags)
            {
                string flag      = flagTuple.Item1;
                string parameter = flagTuple.Item2;

                switch (flag)
                {
                case "e":
                    calcEntropy = true;
                    break;

                case "v":
                    onlineValidation = true;
                    break;

                case "p":
                    searchPath = parameter;
                    break;

                case "m":
                    searchMask = parameter;
                    break;

                case "y":
                    yaraRulesFile = parameter;
                    break;
                }
            }

            ReportOutput($"Search [P]ath: \"{searchPath}\"");
            ReportOutput($"Search [M]ask: {searchMask}");
            ReportOutput($"Calulate [E]ntropy: {calcEntropy}");
            ReportOutput($"Online [V]alidation: {onlineValidation}");
            ReportOutput($"[Y]ara Rules File: \"{yaraRulesFile}\"");
            ReportOutput("");

            FileEnumeratorParameters parameters = new FileEnumeratorParameters(CancellationToken.None, Settings.FileEnumeration_DisableWorkerThread, searchPath, searchMask, calcEntropy, onlineValidation, yaraRulesFile, ReportOutput, LogOutput, ReportResults, ReportException);

            ReportOutput("Beginning enumeration...");
            FileEnumerator.LaunchFileEnumerator(parameters);
        }