• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            風神

            悟空。。。。。。。。。
            posts - 5, comments - 6, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            實現程序自己更新自己

            Posted on 2008-12-16 17:56 風神 閱讀(2569) 評論(2)  編輯 收藏 引用 所屬分類: 程序點滴
            以前做了個自動更新程序,后來把這個自動更新程序更新了,但是當時沒有設計讓自動更新程序來更新自己,這次就把這個功能加到里面了。在添加這個功能的時候,在網上搜了一下,已經有很多這方面的資料,我最后用了批處理來完成的。
            設計思路:
            1.自動更新程序檢測到網上有新版本的自己時,先從網上下載新版本程序到同一個目錄下,另起個名字保存。
            2.在自動更新程序退出時,創建并運行一個批處理文件,來完成以舊換新的功能。

            下面是相關的實現部分

             1 bool CAutoUpdateDlg::DeleteMyself(void)
             2 {
             3     //1.創建自己批處理文件
             4     CString sbatName,sPath;
             5     sPath=m_strAppPath+m_strAppName;
             6     sbatName=m_strAppPath+"delete.bat";
             7     ofstream outfile(sbatName.GetBuffer());
             8     if(outfile)
             9     {
            10         outfile<<":try"<<endl; //定義標記
            11         outfile<<"choice /t 1 /d y >nul"<<endl; //暫停1秒
            12         outfile<<"del \""+sPath+"\""<<endl; //刪除原程序文件
            13         outfile<<"if exist \""+sPath+"\""+" goto :try"<<endl; //如果刪除失敗,運行到標記try處,循環以上步驟
            14         outfile<<"rename "+m_strAppBakName+" "+m_strAppName<<endl; //重命名新文件為程序文件
            15         outfile<<"del \""+sbatName+"\""//刪除批處理文件
            16     }
            17     outfile.close();
            18 
            19     //2.創建運行批處理的進程,它以空閑優先級創建
            20     STARTUPINFO si;
            21     PROCESS_INFORMATION pi;
            22     ZeroMemory( &si, sizeof(si) );
            23     si.cb = sizeof(si);
            24     si.dwFlags=STARTF_USESHOWWINDOW;
            25     si.wShowWindow=SW_HIDE; //以隱藏狀態運行
            26     ZeroMemory( &pi, sizeof(pi) );
            27     if!CreateProcess( NULL, // No module name (use command line). 
            28         sbatName.GetBuffer(), // Command line. 
            29         NULL,             // Process handle not inheritable. 
            30         NULL,             // Thread handle not inheritable. 
            31         FALSE,            // Set handle inheritance to FALSE. 
            32         IDLE_PRIORITY_CLASS,                // IDLE flags. 
            33         NULL,             // Use parent's environment block. 
            34         NULL,             // Use parent's starting directory. 
            35         &si,              // Pointer to STARTUPINFO structure.
            36         &pi )             // Pointer to PROCESS_INFORMATION structure.
            37         ) 
            38     {        
            39         CloseHandle(pi.hThread);
            40         CloseHandle(pi.hProcess);
            41         return false;
            42     }
            43     return true;
            44 }

            程序經過我的一番測試,暫時沒有出現不良反應。希望對有這方面需求的朋友能有所借鑒,程序寫的比較簡單,如果有什么改進的地方或是有更好的辦法,希望能及時的告知,謝謝。

            Feedback

            # re: 實現程序自己更新自己  回復  更多評論   

            2008-12-17 09:34 by 代李
            貌似 可以把正在運行的程序名字name_old.exe給改掉name_bak.exe,把新程序 更名為name.exe
            下次啟動的時候還是啟動name.exe

            # re: 實現程序自己更新自己  回復  更多評論   

            2008-12-17 23:28 by 肥仔
            批處理實現不了太復查的更新邏輯,這個是弱點
            欧美午夜A∨大片久久| 青青青国产精品国产精品久久久久| 91精品国产综合久久四虎久久无码一级| 狠色狠色狠狠色综合久久| 日本免费一区二区久久人人澡| 国产精品天天影视久久综合网| 国产亚洲成人久久| 亚洲国产精品无码久久SM| 狠狠色婷婷综合天天久久丁香| 久久精品99无色码中文字幕| 亚洲精品乱码久久久久久| 久久久久国产一级毛片高清版| 久久久久无码精品国产app| 久久精品国产亚洲AV蜜臀色欲| 久久精品国产99国产电影网| 久久人人爽人人爽人人av东京热| 久久精品成人免费看| 亚洲成色www久久网站夜月| 久久99精品久久久久久水蜜桃 | 久久精品水蜜桃av综合天堂 | 久久人人爽人人爽人人片AV高清| 国产精品久久久久久| 亚洲女久久久噜噜噜熟女| 久久久久久国产a免费观看不卡| 久久精品麻豆日日躁夜夜躁| 伊人精品久久久久7777| 久久国产成人| 狠狠综合久久综合中文88| 久久夜色精品国产亚洲| AV狠狠色丁香婷婷综合久久| 亚洲伊人久久精品影院| 亚洲欧洲精品成人久久奇米网| 93精91精品国产综合久久香蕉| 国产99久久精品一区二区| 人妻少妇久久中文字幕一区二区| 女人高潮久久久叫人喷水| 欧美精品福利视频一区二区三区久久久精品 | 久久A级毛片免费观看| 亚洲午夜久久久影院| 久久久久波多野结衣高潮| 久久狠狠爱亚洲综合影院|