如果文件包含病毒,如何让 Bitdefender(防病毒)扫描文件并删除它?

How can I get Bitdefender (antivirus) to scan a file and delete it if the file contains a virus?

这是我用来将文件写入 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是不会删除这个文件的,除非我去IIS上手动尝试open/move这个文件。如果我这样做,它会立即被删除。

如果我将测试病毒文件直接复制并粘贴到 app_data 文件夹中,Bitdefender 会立即将其删除。

我已经尝试使用各种方法来 read/move 具有 System.IO.File.Move/Open/ReadAllLines 的文件。然而,没有任何东西会触发 bit defender 删除文件。

我唯一要做的就是创建一个新进程来打开文件。但是,我不想在服务器上这样做。我正在寻找不同的解决方案。这是我用来打开文件的代码,它确实会导致 Bitdefender 扫描并删除受感染的文件:

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

在这种情况下,System.IO.File.Open 的解决方案最适合我,但我不明白为什么它不起作用。或者,触发 Bitdefender 立即扫描文件的方法也是一种可行的解决方案。

我已经在@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();

这将创建一个新进程并查找 bitdefender exe,然后运行命令扫描提供路径中的文件。