這個東西本身沒什么技術含量,啟動新進程 跟命令行一樣 幾句代碼的事 。說白了 還是要靠殺毒軟件支持。比如你可以在服務器上做一個自動化的 程序模塊 ,有用戶上傳文檔 就進行病毒檢測。現在的殺毒軟件都可以自動做到這些的 ,指定目錄下出現病毒文件會報的。殺毒軟件還可以設定計划任務 ,指定何時掃描指定文件夾 ,可以設定檢測到病毒后對文件的處理方式。其實這種需求本身是沒什么太大必要的 ,坑爹啊 客戶是上帝啊。既然有需求我們就要 給客戶實現。
好 不說了開始干活了。先從網上下載個免費版的小紅傘 ,安裝好。我的是這個版本的:
轉到我的安裝目錄 C:\Program Files (x86)\Avira\AntiVir Desktop 看到這個了噻: avscan.exe ,我們就調用它。通過命令調用avscan需要一個配置文件 ,我們在d盤新建一個文本文件 更名為myavp.avp 內容為:
[CFG]
GuiMode=1
ExitMode=1
[SEARCH]
Parameter=0x00300432
[CONTROLCENTER]
ProfileName=myscan
然后把文件屬性設為只讀 ,要不然 調用后 小紅傘會刪除此配置文件。別問我什么意思 ,我也不知道什么意思 ,小紅傘安裝目錄也有很多的avp文件 。不過可以確定一點 guimode=1 意思是控制是否彈出界面 ,哇哈哈 ,別砸我。為了測試成功與否我們得找個病毒文件,擦 我哪去找病毒文件啊 ,最終我還是找了個 ,當前比較流行 時尚的lpk.dll 。如假包換這絕對是一個病毒文件 我朋友傳給我的壓縮包里的。然后再隨便找個圖片文件 th.jpg 其他隨便什么exe文件 隨便都可以 隨意。
然后 運行命令行如下:
D:\>cd C:\Program Files (x86)\Avira\AntiVir Desktop
C:\Program Files (x86)\Avira\AntiVir Desktop>avscan /CFG="d:\myavp.avp" /PATH="d:\th.jpg"
這只是個普通圖片文件 事實檢測此妹紙是無毒的:
然后運行命令 參數設定為掃描有病毒的文件:
C:\Program Files (x86)\Avira\AntiVir Desktop>avscan /CFG="d:\myavp.avp" /PATH="d:\lpk.dll"
結果:
注意在win7下 有可能會出現提示“要允許以下程序對計算機進行更新嗎” 這個請自行設置 管理員權限。
我們想要的是不讓他彈出界面,把上面的 配置 第一個項改成GuiMode=0 ,然后再運行命令行 ,結果是 界面是沒了 但是命令行里 卻什么結果也不返回 。運行命令 然后就完了 空空如也 這個我也不知道怎么回事 先不管。 新建一個winform程序 寫一段如下c#函數:
1 void invokeAntivirus(string executeFileFullName,string args,string docFullName) 2 { 3 Process proc =null; 4 proc = new System.Diagnostics.Process(); 5 proc.StartInfo.FileName = executeFileFullName; 6 proc.StartInfo.Arguments = string.Format(args, docFullName); 7 proc.Start(); 8 proc.WaitForExit(); //等待 9 10 if (proc.ExitCode == 0) 11 MessageBox.Show("沒病毒啦啦啦"); 12 else 13 MessageBox.Show("注意,有情況"); 14 }
然后在按鈕的click事件里調用:
1 string exe = @"C:\Program Files (x86)\Avira\AntiVir Desktop\avscan.exe"; 2 string args = "/CFG=\"d:\\myavp.avp\" /PATH=\"{0}\""; 3 string docFile = textBox1.Text; 4 invokeAntivirus(exe, args, docFile);
最后運行下我們編譯后在debug目錄的程序 ,一定要鼠標右鍵 以管理員方式運行。
在文本框填寫d:\th.jpg
在文本框填寫:d:\lpk.dll
當你點擊按鈕后界面會死幾秒鍾 才有反應 ,因為要等掃描進程結束。如果你想解決此情況不讓界面死掉 那么最簡單的方式 放到另一個線程里執行就可以了。proc.ExitCode != 0 的那些代碼是什么意思其實我也不明白 ,反正等於0的是正常文件 。反正功能實現了就行了 坑啊。注意需掃描的文件名或者路徑填錯了 並不報錯 而是proc.ExitCode==0 。並且掃描結束后發現d盤的病毒文件已經不見了。再看小紅傘的界面 原來已經被自動隔離了: