Как я могу заставить Bitdefender (антивирус) сканировать файл и удалять его, если файл содержит вирус? - PullRequest
0 голосов
/ 05 февраля 2020

Это код, который я использую, чтобы записать свой файл в папку app_data:

var filename = Server.MapPath("~/App_Data") + "/" thefilename;
var ms = new MemoryStream();

file.InputStream.CopyTo(ms);
file.InputStream.Position = 0;
byte[] contents = ms.ToArray();

var fileStream = new System.IO.FileStream(filename, System.IO.FileMode.Create,
System.IO.FileAccess.ReadWrite);
fileStream.Write(contents, 0, contents.Length);

fileStream.Close();

Это нормально пишет файл. Однако, если на нем есть вирус, Bitdefender не удаляет этот файл, если только я go на IIS и вручную не пытаюсь открыть / переместить файл. Если я это сделаю, то он будет немедленно удален.

Если я скопирую и вставлю тестовый вирусный файл в папку app_data напрямую, то Bitdefender удалит его мгновенно.

Я пытался использовать различные способы прочитать / переместить файл с помощью System.IO.File.Move / Open / ReadAllLines. Тем не менее, ничто не вызывает побитового защитника для удаления файла.

Единственное, что я получил, - это создание нового процесса для открытия файла. Однако я не хочу делать это на сервере. Я ищу другое решение. Это код, который я использовал для открытия файла, который заставляет Bitdefender сканировать и удалять зараженный файл:

Process cmd = new Process();
cmd.StartInfo.FileName = filename;
cmd.Start();

Решение с System.IO.File.Open было бы для меня лучшим в этой ситуации, но я не могу понять, почему это не работает. С другой стороны, способ запустить Bitdefender для мгновенного сканирования файла также будет жизнеспособным решением.

1 Ответ

1 голос
/ 07 февраля 2020

Я решил проблему с помощью @sheavens и следующего кода:

Process cmd = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = @"C:\Program Files\Bitdefender\Endpoint Security\product.console.exe";
var args = String.Format("/c FileScan.OnDemand.RunScanTask custom path=\"{0}\" infectedAction1=delete", filename);
startInfo.Arguments = args;
cmd.StartInfo = startInfo;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardError = true;
var result = cmd.Start();

Это создает новый процесс и ищет exe-файл bitdefender, а затем запускает команду для сканирования файла на предоставленный путь.

...