static void Main(string[] args) { Log.licenseHeader(); string baseDirectory = AppDomain.CurrentDomain.BaseDirectory; string logFile = Path.Combine(baseDirectory, logID + DateTime.Now.ToString("yyyyMMdd") + logExt); string workingDirectory = String.Empty; string processDirectory = String.Empty; bool logVerbose = true; int fileRententionDays = 31; string inbox = String.Empty; string searchSubject = String.Empty; try { workingDirectory = ConfigurationManager.AppSettings["WorkingDirectory"]; processDirectory = Path.Combine(workingDirectory, processedDir); logVerbose = bool.Parse(ConfigurationManager.AppSettings["LogVerbose"]); fileRententionDays = int.Parse(ConfigurationManager.AppSettings["ProcessedFileRetentionDays"]); inbox = ConfigurationManager.AppSettings["Inbox"]; searchSubject = ConfigurationManager.AppSettings["SearchSubject"]; if (!Directory.Exists(workingDirectory)) { Directory.CreateDirectory(workingDirectory); } if (!Directory.Exists(processDirectory)) { Directory.CreateDirectory(processDirectory); } } catch (Exception ex) { Log.message(LogEntryType.ERROR, "DBAidExtractor", ex.Message + " - " + ex.StackTrace, logFile); Log.message(LogEntryType.ERROR, "DBAidExtractor", "Settings in App.Config may be incorrect and/or missing." + " - " + ex.StackTrace, logFile); Console.Write("Settings in App.Config may be incorrect and/or missing."); return; } try { //Clean up old log files FileIo.delete(baseDirectory, "*" + logExt, DateTime.Now.AddDays(-7)); if (fileRententionDays > 0) { fileRententionDays = fileRententionDays * -1; } //Clean up old processed files FileIo.delete(processDirectory, "*" + processedExt, DateTime.Now.AddDays(fileRententionDays)); } catch (Exception ex) { Log.message(LogEntryType.WARNING, "DBAidExtractor", ex.Message + (logVerbose ? " - " + ex.StackTrace : ""), logFile); } Log.message(LogEntryType.INFO, "DBAidExtractor", "Starting DBAid Extractor", logFile); //download emails from exchange try { Exchange.DownloadAttachement(inbox, searchSubject, workingDirectory, logFile, logVerbose); } catch (Exception ex) { Log.message(LogEntryType.ERROR, "DBAidExtractor", ex.Message, logFile); Log.message(LogEntryType.ERROR, "DBAidExtractor", "Error Downloading attachment from exchange", logFile); throw; } ConnectionStringSettings css = ConfigurationManager.ConnectionStrings[0]; SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder(css.ConnectionString); csb.ApplicationName = logID + Guid.NewGuid().ToString(); foreach (string fileToProcess in Directory.GetFiles(workingDirectory, "*" + ext)) { Dictionary <string, object> parameters = new Dictionary <string, object>(); string servername = Path.GetFileNameWithoutExtension(fileToProcess); //if the instance name has an underscore, convert back. if (servername.Substring(0, 1) == "[") { servername = servername.Substring(1); servername = servername.Split(']')[0]; parameters.Add("server_name", servername); } else { servername = servername.Split('_')[0]; parameters.Add("server_name", servername); } try /* Read in and decrypt encrypted files */ { string privateKey = Query.Execute(csb.ConnectionString, privateKeyProc, parameters).Rows[0][0].ToString(); try { using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(fileToProcess))) { Crypto.decrypt(privateKey, ms, fileToProcess.Replace(ext, ".decrypted.xml")); } } catch (Exception ex) { Log.message(LogEntryType.WARNING, "DBAidExtractor", ex.Message + (logVerbose ? " - " + ex.StackTrace : ""), logFile); Log.message(LogEntryType.WARNING, "DBAidExtractor", "Failed to decrypted " + fileToProcess, logFile); continue; } try { FileIo.move(fileToProcess, Path.Combine(processDirectory, Path.GetFileName(fileToProcess) + ".processed")); } catch (Exception ex) { Log.message(LogEntryType.WARNING, "DBAidExtractor", ex.Message + (logVerbose ? " - " + ex.StackTrace : ""), logFile); Log.message(LogEntryType.WARNING, "DBAidExtractor", "Failed to decrypted " + fileToProcess, logFile); continue; } if (logVerbose) { Log.message(LogEntryType.INFO, "DBAidExtractor", "Processed file: " + fileToProcess, logFile); } } catch (Exception ex) { Log.message(LogEntryType.WARNING, "DBAidExtractor", ex.Message + (logVerbose ? " - " + ex.StackTrace : ""), logFile); Log.message(LogEntryType.WARNING, "DBAidExtractor", "Could not decrypt file for " + servername + " Check if server exists in DailyCheck db server table and public private key is correct", logFile); continue; } } Log.message(LogEntryType.INFO, "DBAidExtractor", "Finished processing encrypted files.", logFile); // try to move the files using the the setting in FileIo.Config try { string moveConfig = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "move.config"); XmlDocument doc = new XmlDocument(); string source = String.Empty; string filter = String.Empty; string destination = String.Empty; if (File.Exists(moveConfig)) { doc.Load(moveConfig); foreach (XPathNavigator child in doc.CreateNavigator().Select("move/file")) { source = child.SelectSingleNode("@source").Value; filter = child.SelectSingleNode("@filter").Value; destination = child.SelectSingleNode("@destination").Value; List <MoveList> movedFiles = FileIo.movelist(source, filter, destination); foreach (MoveList i in movedFiles) { try { FileIo.move(i.sourcefile, i.destfile); if (logVerbose) { Log.message(LogEntryType.INFO, "DBAidExtractor", "Moved file: \"" + i.sourcefile + "\" > \"" + i.destfile + "\"", logFile); } } catch (Exception ex) { Log.message(LogEntryType.WARNING, "DBAidExtractor", ex.Message + (logVerbose ? " - " + ex.StackTrace : ""), logFile); Log.message(LogEntryType.WARNING, "DBAidExtractor", "Error occured when moving file: " + i.sourcefile, logFile); } } } } else { Log.message(LogEntryType.INFO, "DBAidExtractor", "No \"move.config\" file found in executable directory, skipping. ", logFile); } } catch (Exception ex) { Log.message(LogEntryType.WARNING, "DBAidExtractor", ex.Message + (logVerbose ? " - " + ex.StackTrace : ""), logFile); } Log.message(LogEntryType.INFO, "DBAidExtractor", "Completed DBAid Extractor", logFile); }