示例#1
0
        private static void GetFiles(StringCollection colFiles, ProcessingErrors colErrors, string sPathName, params string[] sFilePattern)
        {
            try
            {
                DirectoryInfo diBase = new DirectoryInfo(sPathName);

                foreach (string pattern in sFilePattern)
                {
                    foreach (FileInfo fInfo in diBase.GetFiles(pattern))
                    {
                        try
                        {
                            if ((fInfo.Attributes & FileAttributes.ReparsePoint) > 0)
                            {
                                continue;
                            }

                            if (!colFiles.Contains(fInfo.FullName))
                            {
                                colFiles.Add(fInfo.FullName);
                            }
                        }
                        catch (Exception ex)
                        {
                            colErrors.Add(new ProcessingError(fInfo.FullName, ex));
                        }
                    }

                    foreach (DirectoryInfo diSub in diBase.GetDirectories())
                    {
                        try
                        {
                            if ((diSub.Attributes & FileAttributes.ReparsePoint) > 0)
                            {
                                continue;
                            }

                            GetFiles(colFiles, colErrors, diSub.FullName, pattern);
                        }
                        catch (Exception ex)
                        {
                            colErrors.Add(new ProcessingError(diSub.FullName, ex));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                colErrors.Add(new ProcessingError(sPathName, ex));
            }
        }
示例#2
0
 public virtual void ReadFrom(XElement xE)
 {
     Id                    = null;
     Status                = null;
     ProgressStats         = null;
     UploadUrl             = null;
     DownloadUrl           = null;
     ProcessingErrors      = null;
     DiskUsageQuotaBalance = null;
     foreach (var xItem in xE.Elements())
     {
         var localName = xItem.Name.LocalName;
         if (localName == "id")
         {
             Id = long.Parse(xItem.Value);
         }
         else if (localName == "status")
         {
             Status = BatchJobStatusExtensions.Parse(xItem.Value);
         }
         else if (localName == "progressStats")
         {
             ProgressStats = new ProgressStats();
             ProgressStats.ReadFrom(xItem);
         }
         else if (localName == "uploadUrl")
         {
             UploadUrl = new TemporaryUrl();
             UploadUrl.ReadFrom(xItem);
         }
         else if (localName == "downloadUrl")
         {
             DownloadUrl = new TemporaryUrl();
             DownloadUrl.ReadFrom(xItem);
         }
         else if (localName == "processingErrors")
         {
             if (ProcessingErrors == null)
             {
                 ProcessingErrors = new List <BatchJobProcessingError>();
             }
             var processingErrorsItem = new BatchJobProcessingError();
             processingErrorsItem.ReadFrom(xItem);
             ProcessingErrors.Add(processingErrorsItem);
         }
         else if (localName == "diskUsageQuotaBalance")
         {
             DiskUsageQuotaBalance = long.Parse(xItem.Value);
         }
     }
 }
示例#3
0
 private void RunProcessingErrors()
 {
     ProcessingErrors.Foo();
 }
示例#4
0
        public static void ParseCommandLine(
            [Required(Description = "Output directory")]
            string PathName,
            [Optional("*", Description = "Drive to search")]
            string Drive,
            [Optional("+*.exe|+*.com", Description = "Files to scan")]
            string Files,
            [Optional("+*", Description = "Directories to scan")]
            string Dirs,
            [Optional("NRB", Description = "Attributes to fetch")]
            string Get,
            [Optional("Idle", Description = "System load")]
            string P,
            [Optional(false, Description = "Scan only exe files")]
            bool Exe,
            [Optional("cwd", Description = "Working directory")]
            string BaseDir)
        {
            StringCollection scFilePattern = new StringCollection();
            StringCollection scDirPattern  = new StringCollection();
            StringCollection colFiles      = new StringCollection();
            ProcessingErrors colErrors     = new ProcessingErrors();

            string[] sFilePatternArr;
            string[] sTargetFiles;

            string[] sDirPatternArr;

            if (string.Equals(BaseDir, "cwd", StringComparison.OrdinalIgnoreCase))
            {
                BaseDir = System.IO.Directory.GetCurrentDirectory();
            }

            if (!System.IO.Path.HasExtension(PathName))
            {
                string sFileName = String.Empty;
                sFileName = System.DateTime.Now.ToString("yyyyMMddHHmmss") + System.Environment.MachineName + ".xml";
                PathName  = System.IO.Path.Combine(PathName, sFileName);
            }

            // Files
            if (!Exe)
            {
                if (Files.Contains("|"))
                {
                    foreach (string sPattern in Files.Split('|'))
                    {
                        if (!sPattern.StartsWith("+") && !sPattern.StartsWith("-"))
                        {
                            Console.WriteLine("Wrong filter for files specified.");
                            System.Environment.Exit(-1);
                        }
                        if (sPattern.StartsWith("+"))
                        {
                            scFilePattern.Add(sPattern.Remove(0, 1));
                        }
                    }
                }
                else
                {
                    if (!Files.StartsWith("+") && !Files.StartsWith("-"))
                    {
                        Console.WriteLine("Wrong filter for files specified.");
                        System.Environment.Exit(-1);
                    }
                    if (Files.StartsWith("+"))
                    {
                        scFilePattern.Add(Files.Remove(0, 1));
                    }
                }
            }
            else
            {
                scFilePattern.Add("*.exe");
            }

            sFilePatternArr = new String[scFilePattern.Count];
            scFilePattern.CopyTo(sFilePatternArr, 0);

            // Directories
            if (Dirs.Contains("|"))
            {
                foreach (string sPattern in Dirs.Split('|'))
                {
                    if (!sPattern.StartsWith("+") && !sPattern.StartsWith("-"))
                    {
                        Console.WriteLine("Wrong filter for directories specified.");
                        System.Environment.Exit(-1);
                    }
                    if (sPattern.StartsWith("+"))
                    {
                        scDirPattern.Add(sPattern.Remove(0, 1));
                    }
                }
            }
            else
            {
                if (!Dirs.StartsWith("+") && !Dirs.StartsWith("-"))
                {
                    Console.WriteLine("Wrong filter for directories specified.");
                    System.Environment.Exit(-1);
                }
                if (Dirs.StartsWith("+"))
                {
                    scDirPattern.Add(Dirs.Remove(0, 1));
                }
            }

            sDirPatternArr = new String[scDirPattern.Count];
            scDirPattern.CopyTo(sDirPatternArr, 0);

            GetFiles(colFiles, colErrors, BaseDir, sFilePatternArr);

            CreateXML_1(PathName, colFiles, colErrors);
        }
示例#5
0
        private static void CreateXML_1(string sFileName, StringCollection colFiles, ProcessingErrors colErrors)
        {
            XmlDocument xmlFile = new XmlDocument();
            XmlElement  xmlAppdetect;
            XmlElement  xmlFiles;
            XmlElement  xmlFileName;
            XmlElement  xmlFileResources;
            XmlElement  xmlFileResource;
            XmlElement  xmlIconImprint;
            XmlElement  xmlFileBinImprint;
            XmlElement  xmlErrorReport;
            XmlElement  xmlError;

            xmlFile.AppendChild(xmlFile.CreateXmlDeclaration("1.0", "UTF-8", ""));

            xmlAppdetect = xmlFile.CreateElement("AppDetect");
            xmlAppdetect.SetAttribute("ComputerName", System.Environment.MachineName);
            xmlAppdetect.SetAttribute("UserName", System.Environment.UserName);
            xmlAppdetect.SetAttribute("ProcessTime", System.DateTime.Now.ToString("yyyyMMddHHmmss"));

            foreach (string sFile in colFiles)
            {
                try
                {
                    xmlFiles = xmlFile.CreateElement("File");

                    xmlFileName = xmlFile.CreateElement("Name");
                    xmlFileName.SetAttribute("FileName", Path.GetFileName(sFile));
                    xmlFileName.SetAttribute("PathName", Path.GetDirectoryName(sFile));
                    FileInfo FileInfo = new FileInfo(sFile);

                    using (FileStream fin = FileInfo.Open(FileMode.Open, FileAccess.Read))
                    {
                        xmlFileName.SetAttribute("Size", FileInfo.Length.ToString());

                        xmlFiles.AppendChild(xmlFileName);

                        xmlFileResources = xmlFile.CreateElement("Resources");

                        PEFile pe = new PEFile(fin, (int)FileInfo.Length);
                        foreach (KeyValuePair <string, string> dVS in pe.VersionInfo)
                        {
                            xmlFileResource = xmlFile.CreateElement("Resource");
                            xmlFileResource.SetAttribute("Name", dVS.Key.Replace(" ", ""));
                            xmlFileResource.SetAttribute("Value", dVS.Value);
                            xmlFileResources.AppendChild(xmlFileResource);
                        }
                        xmlFiles.AppendChild(xmlFileResources);

                        xmlFileBinImprint = xmlFile.CreateElement("BinImprint");
                        xmlFileBinImprint.SetAttribute("Imprint", pe.BinImprint);
                        xmlFiles.AppendChild(xmlFileBinImprint);

                        pe.Dispose();

                        uint imprint = IconImprint.GetCRCFromIcon(sFile);

                        if (imprint != 0)
                        {
                            xmlIconImprint = xmlFile.CreateElement("IconImprint");
                            xmlIconImprint.SetAttribute("Imprint", imprint.ToString("X8"));
                            xmlFiles.AppendChild(xmlIconImprint);
                        }
                    }

                    xmlAppdetect.AppendChild(xmlFiles);
                }
                catch (Exception ex)
                {
                    colErrors.Add(new ProcessingError(sFile, ex));
                }
            }

            xmlErrorReport = xmlFile.CreateElement("ErrorReport");
            foreach (ProcessingError pError in colErrors)
            {
                xmlError = xmlFile.CreateElement("Message");
                xmlError.SetAttribute("Type", "Error");
                xmlError.SetAttribute("Number", "1");
                xmlError.SetAttribute("File", pError.File);
                xmlError.SetAttribute("Text", pError.Exception.Message);
                xmlErrorReport.AppendChild(xmlError);
            }
            xmlAppdetect.AppendChild(xmlErrorReport);

            xmlFile.AppendChild(xmlAppdetect);

            XmlTextWriter xmlWriter = new XmlTextWriter(sFileName, System.Text.Encoding.GetEncoding("UTF-8"));

            xmlWriter.Formatting = Formatting.Indented;
            xmlFile.Save(xmlWriter);
        }