⑴ 如何實現c/s下的客戶端的版本更新
用C#實現軟體自動更新思路
前言
長期以來,廣大程序員為到底是使用Client/Server,還是使用Browser/Server結構爭論不休,在這些爭論當中,C/S結構的程序可維護性差,布置困難,升級不方便,維護成本高就是一個相當重要的因素。有很多企業用戶就是因為這個原因而放棄使用C/S。然而當一個應用必須要使用C/S結構才能很好的實現其功能的時候,我們該如何解決客戶端的部署與自動升級問題?部署很簡單,只要點擊安裝程序即可,難的在於每當有新版本發布時,能夠實現自動升級[3]。現在好了,我們的目標很簡單,我們希望開發一個與具體應用無關的能夠復用的自動升級系統。下面我為大家提供了一套可復用的用C#編寫的自動升級系統。
2 實現軟體的自動升級存在的困難
第一,為了查找遠程伺服器上的更新,應用程序必須有查詢網路的途徑,這需要網路編程、簡單的應用程序與伺服器通訊的協議。
第二是下載。下載看起來不需要考慮聯網的問題,但要考慮下載用戶請求的文件,以及在沒有用戶同意時下載大文件。友好的自動更新應用程序將使用剩餘的帶寬下載更新。這聽起來簡單,但卻是一個技術難題,幸運的是已經有了解決方法。
第三個考慮因素是使用新版應用程序更換原應用程序的過程。這個問題比較有趣,因為它要求代碼運行時將自己從系統刪除,有多種辦法可以實現該功能[5],本文程序主要通過比較新舊版本的日期號來實現替換新版本應用程序的功能。
3 實現軟體自動在線升級的原理
寫兩個程序,一個是主程序;一個是升級程序;所有升級任務都由升級程序完成。
1.啟動升級程序,升級程序連接到網站,下載新的主程序(當然還包括支持的庫文件、XML配置文檔等)到臨時文件夾;
2.升級程序獲取伺服器端XML配置文件中新版本程序的更新日期或版本號或文件大小;
3.升級程序獲取原有客戶端應用程序的最近一次更新日期或版本號或文件大小,兩者進行比較;如果發現升級程序的日期大於原有程序的最新日期,則提示用戶是否升級;或者是採用將現有版本與最新版本作比較,發現最新的則提示用戶是否升級;也有人用其它屬性如文件大小進行比較,發現升級程序的文件大小大於舊版本的程序的大小則提示用戶升級。本文主要採用比較新舊版本更新日期號來提示用戶升級。
4.如果用戶選擇升級,則獲取下載文件列表,開始進行批量下載文檔;
5.升級程序檢測舊的主程序是否活動,若活動則關閉舊的主程序;
6.刪除舊的主程序,拷貝臨時文件夾中的文件到相應的位置;
7.檢查主程序的狀態,若狀態為活動的,則啟動新的主程序;
8.關閉升級程序,升級完成[4]。
4 用C#實現在線升級的關鍵步驟
這里我主要使用日期信息來檢測是否需要下載升級版本。
4.1 准備一個XML配置文件
名稱為AutoUpdater.xml,作用是作為一個升級用的模板,顯示需要升級的信息。
名稱為AutoUpdater.xml,作用是作為一個升級用的模板,顯示需要升級的信息。
⑵ WIN10 檢查更新0x8024500c
試試下面方法: 首扒御先,卸載所有的第三方殺毒軟體和管理軟體。 刪除Windows 更新緩存文件 按Windows+X(或右鍵點擊開始),選擇「命令提示符(管理員)」; 輸春吵岩入:net stop wuauserv,回車(此處會提醒服務停止); 停止後刪除C:\windows\softwareDistribution\Download和DataStore文件夾中的所有文件; 再次在「命令提示符(管理員)」中輸入:net start wuauserv,回車(此碰州處會提醒服務開啟); 最後在Windows Update中,再次嘗試檢查更新。
⑶ c或者c++編寫一個每隔一分鍾檢查一個目錄看裡面是否有新文件產生,如果有就將其復制到另一個目錄下
1.設一個李槐計時器,計時器的間隔設置成一秒。
2.寫一個方法,查找指定目錄羨老的文件,如果有文件,就將其哪派友復制到另一個目錄下。
3.在計時器里調用這個方法即可。
這就是編程思路,把它實現一下即可。
⑷ mac文件夾正在更新怎麼辦
1、打開運行命令,輸入services.msc,點擊確定,2、找到windows update,雙擊打開,3、將啟動類型設置為禁止,拿尺然後點擊停止,點擊確定,4、唯舉在系統盤找到C:\Windows\SoftwareDistribution文件夾,5、將SoftwareDistribution文件夾改名為SDfolder,6、再次找到windows update,雙擊打開,7、設置為自動,然後點擊應用,8、然後再消山高點擊啟動9、正在啟動,啟動完成後點擊確定,再次檢查更新及安裝即可。
⑸ linux環境下怎麼用c語言實現讀取文件更新時間
用腳本行不行?
ls -l
⑹ c語言如何判斷一個文件是否被修改
可以用 文件狀態 ,例如 文件建立時間,文件最後一次修改時間,文件最後一次被訪問的時間,做判斷。
獲取文件狀態用:
#include <io.h>
int get_namein_time(char *namein, char * ftime){
struct _finddata_t fileinfo;
int res,DEBUG=0,flag=0;
if ( (res = _findfirst(namein, &fileinfo)) == -1){
if (DEBUG==1) printf("get file info error !\n");
return 0;
};
if ( strcmp(namein,fileinfo.name)==0 ) {
flag=1; goto Lab;
}
do {
if ( strcmp(namein,fileinfo.name)==0 ) {flag=1;goto Lab;}
} while ( _findnext(res, &fileinfo) ==0);
Lab: strcpy(ftime,ctime(&fileinfo.time_write));
_findclose(res);
return flag;
}
最可靠的是用文件的哈希碼判斷,就是區塊鏈中用的方法。
例如視窗系統,調用系統 Certutil 計算出 文件的 哈希碼,與文件原來的碼對比。若變了,就是被修改了。
Certutil -hashfile abc.txt MD5 這個檢查 文件 abc.txt
Certutil -hashfile XYZ.txt SHA512 這個檢查 文件 XYZ.txt
⑺ C語言怎麼更新文件內容
提供思路:先一組一組數據讀取,然後進行比較,看是不是你要修改的數據(如果是你要修改的數據,那此時文件的指針已經指向下一組數據了),然後用fseek(fp,-sizeof(type),SEEK_CUR);使文件指針指向該數據塊(fp為文件指針,sizeof(type)為察碧譽數據長度,type是我指定,你可以換成你需要的數據類型,比如int或是struct等) 如果你知道數據慧備是第幾組就更好了,直接用fseek(fp,(n-1)*sizeof(type),SEEK_SET);就能找到位置了 用前面兩種方法的前提是,你存入數據的時候用的都是以數據塊的方式寫入的同一種數據(比如只用fwrite()函數寫入的struct類型數據),如果用的是復合方式寫入,比如用了fwrite()、fputc()、fprintf(),這敗段樣的話,定位就有問題了。
⑻ 更新驅動後c盤滿了怎麼釋放更新文件
C盤滑鼠右鍵屬性,然後點磁碟清理,然後點清理系統文件,然後勾選系統更新進行清理即可,如下圖所示:
⑼ 電腦開機,一直顯示的說檢查C以上的文件系統,然後就不動了
非磨念早正常關機或者磁碟有錯誤才會出現的。
你可以先下載個HDtune軟體檢測下是否有壞道,如果沒有可以高激強行關閉自檢。
1、首先依次打開「開始菜單—運行」選項,然後在運行對話框中輸入regedit回車,打開注冊表編輯器;
2、然後在打開的注冊表的左側,依次找到「HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\BootExecute」項;
3、然後瞎雀將裡面的數值「autocheck autochk」刪掉,點擊確定保存退出注冊即可。