public static void Main(string[] args) { if (IsSingleInstance()) { StringArgument silentArg = new StringArgument("quiet", "Hide application window", "Run application in background"); StringArgument logFileArg = new StringArgument("log", "Log File", "Path to log file"); StringArgument verbArg = new StringArgument("verbose", "Verbose level", "3 - Debug\r\n2 - Normal\r\n1 - Error"); ArgumentParser argParser = new ArgumentParser("Vinisandbox", "Analyze static and dynamically file"); argParser.Add("\\", "quiet", silentArg); argParser.Add("\\", "log", logFileArg); argParser.Add("\\", "verbose", verbArg); LogManager.VerboseLevel = LogManager.EVerboseLevel.Normal; try { if (args.Contains("\\quiet")) { var aux = args.ToList(); aux.Remove("\\quiet"); args = aux.ToArray(); HideWindow(); } argParser.Parse(args); if (argParser.HelpMode) { argParser.WriteLongArgumentsUsage(); Console.Read(); return; } if (logFileArg.Defined) { LogManager.LogPath = (string)logFileArg.ObjectValue; try { if (!File.Exists(LogManager.LogPath)) { File.Create(LogManager.LogPath).Close(); } } catch (Exception) { LogManager.WriteLine("Invalid Log File", LogManager.EVerboseLevel.Error); argParser.WriteShortArgumentsUsage(); Console.Read(); return; } } if (verbArg.Defined) { try { LogManager.VerboseLevel = (LogManager.EVerboseLevel)Enum.ToObject(typeof(LogManager.EVerboseLevel), Convert.ToInt32((string)verbArg.ObjectValue)); } catch (Exception) { LogManager.WriteLine("Invalid Verbose level", LogManager.EVerboseLevel.Error); argParser.WriteShortArgumentsUsage(); Console.Read(); return; } } LogManager.WriteLine("Arguments Parsed", LogManager.EVerboseLevel.Debug); } catch (Exception) { } vinisandboxContext cx = null; try { cx = new vinisandboxContext(); LogManager.WriteLine("DbContext created", LogManager.EVerboseLevel.Debug); } catch (Exception ex) { LogManager.WriteLine("Error on create DbContext: " + ex.ToString(), LogManager.EVerboseLevel.Error); return; } //cx.Configuration.ProxyCreationEnabled = true; //cx.Configuration.LazyLoadingEnabled = true; Configuration config = null; try { config = LoadConfiguration(); LogManager.WriteLine("Configuration Loaded", LogManager.EVerboseLevel.Debug); } catch (Exception ex) { LogManager.WriteLine("Error on load configurations:" + ex.ToString(), LogManager.EVerboseLevel.Error); return; } Sandbox sandbox = null; try { sandbox = new Sandbox(config); LogManager.WriteLine("Sandbox instanciated", LogManager.EVerboseLevel.Debug); } catch (Exception ex) { LogManager.WriteLine("Error on instanciate Sandbox: " + ex.ToString(), LogManager.EVerboseLevel.Error); return; } try { DirectoryInfo di = new DirectoryInfo(config.TempFolder); di.Create(); LogManager.WriteLine("Temporary directory created", LogManager.EVerboseLevel.Debug); } catch (Exception ex) { LogManager.WriteLine("Error on create temporary directory: " + ex.ToString(), LogManager.EVerboseLevel.Error); return; } /*string pat = @"C:\Users\Vinicius\Downloads\sed-4.2.1-setup.exe"; * file_detail fd = new file_detail(); * fd.data = File.ReadAllBytes(pat); * fd.files = new List<file>(); * fd.files.Add(new file() { name = "sed-4.2.1-setup.exe" }); * cx.file_detail.Add(fd); * cx.SaveChanges();*/ LogManager.WriteLine("Waiting for files", LogManager.EVerboseLevel.Normal); while (true) { foreach (var file_det in cx.file_detail.Where(p => !p.analyzed.HasValue || !p.analyzed.Value).Include("files").ToList()) { sandbox.Analyze(file_det); /*foreach (var file in file_det.files) * { * file.analyzed = true; * }*/ file_det.analyzed = true; try { cx.SaveChanges(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } Thread.Sleep(config.CheckFrequence); } } else { Console.WriteLine("Ja existe outra instancia do programa rodando."); } }
//private static bool checkFile(string path) //{ // return File.Exists(path); //} public static void Main(string[] args) { if (IsSingleInstance()) { StringArgument silentArg = new StringArgument("quiet", "Hide application window", "Run application in background"); StringArgument logFileArg = new StringArgument("log", "Log File", "Path to log file"); StringArgument verbArg = new StringArgument("verbose", "Verbose level", "3 - Debug\r\n2 - Normal\r\n1 - Error"); ArgumentParser argParser = new ArgumentParser("Vinisandbox", "Analyze static and dynamically file"); argParser.Add("\\", "\\quiet", silentArg); argParser.Add("\\", "\\log", logFileArg); argParser.Add("\\", "\\v", verbArg); LogManager.VerboseLevel = LogManager.EVerboseLevel.Normal; try { argParser.Parse(args); if (silentArg.Defined) { HideWindow(); } if (logFileArg.Defined) { LogManager.LogPath = (string)logFileArg.ObjectValue; try { File.Create(LogManager.LogPath); } catch (Exception) { Console.WriteLine("Invalid Log File"); argParser.WriteShortArgumentsUsage(); Console.Read(); return; } } if (verbArg.Defined) { try { LogManager.VerboseLevel = (LogManager.EVerboseLevel)Enum.ToObject(typeof(LogManager.EVerboseLevel), (string)verbArg.ObjectValue); } catch (Exception) { Console.WriteLine("Invalid Verbose level"); argParser.WriteShortArgumentsUsage(); Console.Read(); return; } } } catch (Exception) { } vinisandboxContext cx = new vinisandboxContext(); cx.Configuration.ProxyCreationEnabled = true; cx.Configuration.LazyLoadingEnabled = true; Configuration config = LoadConfiguration(); Sandbox sandbox = new Sandbox(config); DirectoryInfo di = new DirectoryInfo(config.TempFolder); di.Create(); /*string pat = @"C:\Users\Vinicius\Downloads\sed-4.2.1-setup.exe"; * file_detail fd = new file_detail(); * fd.data = File.ReadAllBytes(pat); * fd.files = new List<file>(); * fd.files.Add(new file() { name = "sed-4.2.1-setup.exe" }); * cx.file_detail.Add(fd); * cx.SaveChanges();*/ while (true) { foreach (var file_det in cx.file_detail.Where(p => p.files.Count(j => j.analyzed == false) > 0).Include("files").ToList()) { sandbox.Analyze(file_det); foreach (var file in file_det.files) { file.analyzed = true; } try { cx.SaveChanges(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } Thread.Sleep(10000); } } else { Console.WriteLine("Ja existe outra instancia do programa rodando."); } //if (args.Length != 1) //{ // //Erro // Console.WriteLine("Parametros errados."); // return; //} //if (!checkFile(args[0])) //{ // Console.WriteLine(args[0] + " não foi encontrado."); // return; //} //if (IsSingleInstance()) //{ // StartServer(); // Sandbox s = new Sandbox(LoadConfiguration()); // listMutex.WaitOne(); // files.Add(args[0]); // while (files.Count != 0) // { // listMutex.ReleaseMutex(); // s.Analyze(files[0]); // files.RemoveAt(0); // //faz analise // listMutex.WaitOne(); // } // ServerRunning = false; // programMutex.Close(); //} //else //{ // SendPath(args[0]); //} }