Wince後台系統補丁更新實現

2022-04-09 03:46:46 字數 2561 閱讀 4272

雖說是在wince手持平台上,但是系統架構還是c/s模式沒有變,c/s模式比較難搞的乙個部分就是系統更新,這個在wince平台下處理方式跟pc平台上也無特別大的區別,思路差不多都是如下模式:

1.程式啟動之前驗證版本

wince當然也是這個模式,有點不同的就是wince更新時候需要安裝cab包,**下只能用wince自帶的cab包安裝命令

processstartinfo info = new processstartinfo();

info.filename = @"

wceload.exe

";info.arguments = @"

/noui

" + path;

= path;

system.diagnostics.process process = new system.diagnostics.process();

process.startinfo = info;

process.start();

wceload.exe是wince自帶的安裝命令,程式呼叫可以加引數控制,詳情可見msdn,這個命令有個不好的地方就是如果有dll,或者exe占用(執行緒非安全退出),它在安裝的時候是不會呈現出來的,這樣就有可能有客戶端不完整更新,

這是個很糟糕的情況,我們要想辦法避免這種情況出現。因此我們必須要新建乙個project完全負責更新程式,他應該是脫離應用程式的獨立程式。

專案結構如圖

clientloader窗體就是更新的主程式,主要邏輯都在這種實現。

.ico是程式圖示,因為是系統入口程式,所以把這個程式加上圖示而不是加在實際應用程式上。

public

static

system.io.stream st = myrp.getresponsestream();

system.io.stream so = new system.io.filestream(filename, system.io.filemode.create);

long totaldownloadedbyte = 0;

byte by = new

" + percent.tostring() + "

%必須加註這句**,否則label1將因為迴圈執行太快而來不及顯示資訊

}so.close();

st.close();

}catch (system.exception)

}public

static

string getserverversion()

catch (system.exception)

return result;

}public

static

bool ifnoneedupdate()

return

true;

//return clientversion >= serverversion;

}private

static

string getclientvision()

sr.close();

return res;

}catch

}public

static

void setclientvision(string vision)

catch

}

以上可以看到,我們的版本使用文字檔案控制,本地檔案安裝包中有version.ver檔案,是個文字檔案,其中只有一行內容就是版本號,伺服器也有個類似的檔案,是放在ftp伺服器中,我們

這個圖就是我們更新使用程式的窗體。下面2個button是測試時按鈕,visiable是否的,所以就請忽略吧。

此程式所有邏輯都是在load方法裡面實現並完成,**如下

private

void form1_load(object sender, eventargs e)

catch (exception)

else

catch (exception ex)

}

啟動程式:

private

string cabfile = path.combine(cabpath, "

patch.cab

patchurl

");updatehelper.downloadfile(patchurl, cabfile, progressbar1, labeprocess);

return

true;

}

ok,到此,基本上更新就可以完美實現,程式的入口設定成此程式,每次只要有更新之後就增加伺服器版本號檔案的版本,然後把編譯好的補丁包放到對應的位置,每次程式開機時就會實現自動更新。

可以想一想,以上程式只完成了程式入口處檢查版本,更新版本。如果我要在程式執行中發布客戶端**,那怎麼樣處理才是比較好呢...

WinCE系統 USB RNDIS實現

好久不寫部落格了,這段時間實在太忙,和美國人,印度人一起做專案,時差是個大問題,溝通也占用了很多時間,發郵件,開 會議成了家常便飯。不管怎樣,我在部落格的道路上也走了快2年了,我會繼續堅持寫下去,在我有時間的時候。不多廢話了,今天說說rndis。rndis 是指remote ndis 基於usb 實...

WinCE系統 USB Serial實現

回國2周了,時差已經倒回來了,可以繼續我的部落格了。這裡介紹一下usb serial。usb serial 就是指基於 usb的虛擬串列埠,實際上是將 usb作為乙個串列埠裝置來進行操作。對於應用程式來說,通訊起來比較簡單,就是開啟串列埠,然後接收傳送資料就可以了。下面介紹一下具體步驟 1.選擇 u...

WinCE系統 USB Serial實現

回國2周了,時差已經倒回來了,可以繼續我的部落格了。這裡介紹一下usb serial。usb serial就是指基於usb的虛擬串列埠,實際上是將usb作為乙個串列埠裝置來進行操作。對於應用程式來說,通訊起來比較簡單,就是開啟串列埠,然後接收傳送資料就可以了。下面介紹一下具體步驟 1.選擇usb c...