標籤:des winform style blog http io ar color os
這個東西本身沒什麼技術含量,啟動新進程 跟命令列一樣 幾句代碼的事 。說白了 還是要靠殺毒軟體支援。比如你可以在伺服器上做一個自動化的 程式模組 ,有使用者上傳文檔 就進行病毒檢測。現在的殺毒軟體都可以自動做到這些的 ,指定目錄下出現病毒檔案會報的。殺毒軟體還可以設定計劃任務 ,指定何時掃描指定檔案夾 ,可以設定檢測到病毒後對檔案的處理方式。其實這種需求本身是沒什麼太大必要的 ,坑爹啊 客戶是上帝啊。既然有需求我們就要 給客戶實現。
好 不說了開始幹活了。先從網上下載個免費版的小紅傘 ,安裝好。我的是這個版本的:
轉到我的安裝目錄 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 else13 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盤的病毒檔案已經不見了。再看小紅傘的介面 原來已經被自動隔離了:
小紅傘殺毒軟體自動化調用