雖說是在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以上可以看到,我們的版本使用文字檔案控制,本地檔案安裝包中有version.ver檔案,是個文字檔案,其中只有一行內容就是版本號,伺服器也有個類似的檔案,是放在ftp伺服器中,我們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
}
這個圖就是我們更新使用程式的窗體。下面2個button是測試時按鈕,visiable是否的,所以就請忽略吧。
此程式所有邏輯都是在load方法裡面實現並完成,**如下
private啟動程式:void form1_load(object sender, eventargs e)
catch (exception)
else
catch (exception ex)
}
privateok,到此,基本上更新就可以完美實現,程式的入口設定成此程式,每次只要有更新之後就增加伺服器版本號檔案的版本,然後把編譯好的補丁包放到對應的位置,每次程式開機時就會實現自動更新。string cabfile = path.combine(cabpath, "
patch.cab
patchurl
");updatehelper.downloadfile(patchurl, cabfile, progressbar1, labeprocess);
return
true;
}
可以想一想,以上程式只完成了程式入口處檢查版本,更新版本。如果我要在程式執行中發布客戶端**,那怎麼樣處理才是比較好呢...
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...