天天看點

秋式廣告殺手V2.5釋出:各種涉及知識點分享

經過一個多月,終于釋出了秋式廣告殺手新版本v2.5了,由于基本上問題很少,是以更新周期就長一些。

這裡談一點這次改動涉及到的内容和知識點:

秋式廣告殺手V2.5釋出:各種涉及知識點分享

1: 去掉了最初依賴的hosts模式,是以對hosts的增删改代碼都去除了。

2: 百度競價廣告的屏蔽,除了原有的百度搜尋,增加百度知識頁面的廣告屏蔽。

3: 增加了一台伺服器,提供預設一劍出牆的服務。

4: 針對預設代理功能,經過層層思考,允許軟體在不同目錄下的時候可以開多個,以監聽不同的端口,變成一款多端口代理軟體。

秋式廣告殺手V2.5釋出:各種涉及知識點分享

下面分享幾個更新中,被我記住的知識點:

1:線程的try catch的必要性:

先說下線程異常的危害性:

1:winform程式:線程異常,若未try,會導緻軟體自動退出。

2:webform程式:線程異常,若未try,會導緻應用程式池重新開機,類似網站重新開機。

總結:

别太過份相信自己對代碼的掌控,隻要是線程的代碼函數,都加個try保險,我這種層次的都逃不過萬一的某種錯誤,對于軟體,真是穩定壓倒一切。

2: 軟體隻能啟動單個執行個體的知識點:

有時候,我們隻允許軟體啟動一個執行個體,是以我們通常會有這麼段通用代碼檢測:

秋式廣告殺手V2.5釋出:各種涉及知識點分享

static class program

{

        public static system.threading.semaphore _mutex;

        /// <summary>

        /// 應用程式的主入口點。

        /// </summary>

        [stathread]

        static void main()

        {

            _mutex = new system.threading.semaphore(1, 1, "adkiller");

            if (_mutex.waitone(0, false) == false)

            {

                messagebox.show("軟體已經啟動過了!", "運作提示");

                return;

            } 

秋式廣告殺手V2.5釋出:各種涉及知識點分享

需要有點變化:這次的更新, 需要變成了在不同的目錄允許多開,是以,按邏輯,我寫下了這麼段代碼:

秋式廣告殺手V2.5釋出:各種涉及知識點分享

    process cp = process.getcurrentprocess();

            process[] allpros = process.getprocessesbyname(cp.processname);

            processcount = allpros.length;

            if (processcount > 1)

                foreach (process pro in allpros)

                {

                    if (cp != pro && cp.mainmodule.filename == pro.mainmodule.filename)

                    {

                        messagebox.show("軟體已經啟動過了!", "運作提示");

                        return;

                    }

                }

秋式廣告殺手V2.5釋出:各種涉及知識點分享

這裡又涉及到兩個知識點:

1:調試期的問題:

秋式廣告殺手V2.5釋出:各種涉及知識點分享

在調試的時候,預設有個.vshost宿主,導緻調試後運作的軟體名稱為:秋式廣告殺手.vshost.exe

我要測試多個不同目錄的軟體運作,是以在其它目錄也運作了軟體,問題來了:

調試的程序“秋式廣告殺手.vshost.exe”和直接運作的“秋式廣告殺手.exe”,是對不上号的。

解決方法:

這時候,隻要把:項目-右鍵屬性-調試-啟用vs宿主程序的勾去掉就可以了。

秋式廣告殺手V2.5釋出:各種涉及知識點分享

2:想當然的錯誤:

秋式廣告殺手V2.5釋出:各種涉及知識點分享

以為process.getcurrentprocess()擷取出來的目前程序對象,總會和擷取程序清單裡的同個程序對象一樣,是以才有了cp==pro這樣的對象比較判斷。

實際的錯誤:

用process.getcurrentprocess出來的對象,和循環程序的每一個pro對象都是不等的,是以直接的判斷是錯誤。

秋式廣告殺手V2.5釋出:各種涉及知識點分享

網上這樣相當然的錯誤代碼有點多:

秋式廣告殺手V2.5釋出:各種涉及知識點分享

一開始,我也網上搜了搜,發現好多和我寫的相當然的代碼一樣,網上也有這種用=号判斷出錯誤示例代碼,大夥要注意下。

經過本人細心的發現,對于程序,其程序id是一樣的,于是把判斷的語句改成:

cp.id!=pro.id

通過程序id來判斷是否同一程序。

秋式廣告殺手V2.5釋出:各種涉及知識點分享

好了,本節,基本就分享這兩個相對被我記住的知識小點。 

軟體更新:軟體重新開機運作,系統會自動更新。

版權聲明:本文原創發表于部落格園,作者為路過秋天,原文連結:

http://www.cnblogs.com/cyq1162/archive/2013/03/10/2952934.html