前幾天要傳檔案給純純時,Windows Live Messenger (以下簡稱 MSN)就抗議說沒有設定防毒軟體。因為之前是用 AVG 7.5,但是現在安裝的是 8.5,而且前一版用來掃毒的那隻在 8.5 不復存在了,所以得重新設定。

Google 了一下,發現很多人都說用以下方式就可以了:

         "C:\Program Files\AVG\AVG8\avgscanx.exe" /scan=%file% /clean
  "C:\Program Files\AVG\AVG8\avgscanx.exe" /SCAN=%f

 

 

而且官方也有教。

但如果事情有這麼好就沒有這篇文章了。設定了之後,純純傳過來的檔案一直都沒有被掃到,這真是太神奇了。後來仔細看了 Google 討論的內容,發現 avgscanx.exe 是被呼叫了,但是沒有掃到檔案。就這個現象看來,是代表檔案的變數錯了,但是 MSN 並沒有文件或是說明,指出傳送過來的那個檔案要用什麼變數啊!有位仁兄做了一連串的組合實驗,結果一樣是無效,這下子就有趣了,揪竟~在 MSN 裡面,代表檔名的變數是什麼呢?是 %1,%flie%,%f,還是有著其他不為人知的秘密呢?

李組長除了皺眉頭,覺得案情並不單純之外,還很認真的找出為什麼…

 

============李組長也會寫程式之分隔線============

李組長學的是 C 語言,知道在 int main(int argc, char *argv[]) 中的 argc 跟 argv 代表著傳給該執行檔的參數個數跟字串。如果李組長寫了一隻 Hello.exe,利用 Windows 下的命令提示字元執行:

李組長的命令提示字元> Hello.exe

在這種情形下,argc 會是 1,而 argv[0] 則是「Hello.exe」。如果後面加上參數呢?

李組長的命令提示字元> Hello.exe Arg1 Arg2 Arg3

在這種情形下,argc 是 4,表示共有四個參數,而第一個參數是程式本身,也就是 argv[0] 是「Hello.exe」,argv[1] 是「Arg1」,argv[2] 是「Arg2」,argv[3] 是「Arg3」。

如果把 MSN 當中,設定掃毒的程式那裡設成:

"D:\李組長的資料夾\Hello.exe"

然後有人傳檔案給李組長時,Hello.exe 就會被執行,請問這時候的 argc 是多少呢?聰明的李組長想到了,argc 是 2。有人問李組長:「我沒有指定參數啊?根據李組長學的 C 語言,argc 是 1 才對啊!」

錯了,MSN 把接收到的檔案名稱(完整個路徑加上檔名)當成參數送了進去。所以 argc 是 2,而 argv[0] 就是「D:\李組長的資料夾\Hello.exe」,argv[1] 是接收到的檔名。如果李組長把設定改成:

"D:\李組長的資料夾\Hello.exe" 我不是 犯人

這種情形下,argv 就會是 4,而接收的檔案名稱就會在 argv[3]。

李組長下了一個結論,不管有沒有給程式參數,MSN 都會把接收的檔案名稱當做最後一個參數送給程式。那為什麼程式還要用 %1,%f,或是其他的變數來代表接收的檔案名稱呢?應該是方便程式處理。所以李組長在 Google 找到的資料,每款防毒軟體用來表示接收檔案名稱的變數都不同,因為那跟 MSN 沒有關係。

那 AVG 8.5 要用什麼變數才有用呢?依據李組長找到的資料跟實驗結果,都沒有用,因為程式有 bug。

============李組長寫完了程式之分隔線============

 

依據 AVG 8.5 的官方文件,是使用下來命令來掃描特定檔案:

"C:\Program Files\AVG\AVG8\avgscanx.exe" /scan="咬我啊笨蛋.txt"

但是很顯然的,AVG 8.5 並沒有處理好 MSN 送進來的參數(接收的檔名)。 Google 上有人(因為大家都抄來抄去,不知道原提供者是誰了)提供了一個方法:

1. 到 C:\Program Files\AVG\AVG8\ 底下新增一個文字檔,改名成 AvgScan.bat

2. 編輯這個檔案,內容如下:
    @echo off
    "C:\Program Files\AVG\AVG8\avgscanx.exe" /SCAN=%1 /HEUR /ARC /PUP /CLEAN

3. 到 MSN 設定防毒那裡,選擇 C:\Program Files\AVG\AVG8\,然後自己輸入 AvgScan.bat

 

這樣子就大公告成了。

 

p.s. 今天跟文祥在試傳檔案,發現 MSN 接收簡體或日文檔名時會有問題…看樣子 i18n 沒有做好…

 

全站熱搜

zxlin 發表在 痞客邦 留言(2) 人氣()