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


經過一個多月,終於發布了秋式廣告殺手新版本V2.5了,由於基本上問題很少,所以更新周期就長一些。

 

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

1: 去掉了最初依賴的Hosts模式,所以對Hosts的增刪改代碼都去除了。

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

3: 增加了一台服務器,提供默認一劍出牆的服務。

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


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

 

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

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

1:winform程序:線程異常,若未try,會導致軟件自動退出。

2:webform程序:線程異常,若未try,會導致應用程序池重啟,類似網站重啟。

 

總結:

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

 

2: 軟件只能啟動單個實例的知識點:

有時候,我們只允許軟件啟動一個實例,所以我們通常會有這么段通用代碼檢測:

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;

            } 

 

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

    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;
                    }
                }

            } 

 

 

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

1:調試期的問題:

在調試的時候,默認有個.vshost宿主,導致調試后運行的軟件名稱為:秋式廣告殺手.vshost.exe

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

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

解決方法:

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

 

2:想當然的錯誤:

以為Process.GetCurrentProcess()獲取出來的當前進程對象,總會和獲取進程列表里的同個進程對象一樣,所以才有了cp==pro這樣的對象比較判斷。

實際的錯誤:

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

 

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

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

解決方法:

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

cp.Id!=pro.Id

通過進程ID來判斷是否同一進程。

 

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

 

軟件升級:軟件重啟運行,系統會自動升級。

軟件下載地址:http://www.cyqdata.com/download/article-detail-54271 

 

另外,那10關挑戰題,到現在還沒被完全破關,繼續大伙繼續給力:開發者基礎知識游戲,共10關,歡迎挑戰



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM