using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace VirusCheckTester { class Program { static void Main(string[] args) { try { // Create temp file string tmpFileName = Path.GetTempFileName(); Console.WriteLine(string.Format("Step 1: Creating test file with EICAR virus text in it. File = {0}", tmpFileName)); // Write EICAR virus test text to file using (StreamWriter outfile = new StreamWriter(tmpFileName)) { outfile.Write(@"X5O!P%@AP[4\PZX54(P^)7CC)7}"); outfile.Write(@"$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"); } Console.WriteLine("Step 2: Virus EICAR file created."); // Virus detection check Console.WriteLine("Step 3: Determining if EICAR virus was detected by opening test file."); VirusCheck(tmpFileName, tmpFileName); Console.WriteLine("Step 4: Test file was successfully opened. EICAR virus was not detected!"); } catch(Exception exc) { Console.WriteLine(exc.ToString()); } } public static void VirusCheck( string serverFilename, string clientFilename) { try { // Attempt to open the file. using(FileStream tmpFileStream = new FileStream(serverFilename, FileMode.Open)) { } } catch(Exception exc) { // Treat any encountered error as the content containing a virus. All other possible errors would // be severe errors which would manifest in other areas. For example: a disk full condition would // trigger a server error, an access denied error would be caught on first content virus check during // testing, etc. throw new Exception( string.Format("The file open failed because a virus was detected in the content. Filename: '{0}'", clientFilename), exc); } } } }