訪問最新源代碼及更新歷史:http://git.oschina.net/xcong/CheckUpdate.Net
DownLoad
更新歷史
version 1.2
- [新增]添加UpdateFileClient.exe.config文件,修改UpdateFileClient.exe依賴的.Net Framwork 2.0版本與主程序兼容問題
- [修改]修改更新程序,下載文件不存在時提示文件出錯。
version 1.1
- 【修改】修改窗體文件丟失
- 【新增】新增服務端配置項添加安裝包位置和版本
- 【新增】新增UpdateCommon中VersionHelper下載安裝包方法GetNewVersionToDownloadSetup。如果需要下載,彈窗提醒,並調用瀏覽器下載,同時返回True。
介紹
CheckUpdate.Net是.Net C/S下一個檢查更新程序。現有的檢查更新方式多種多樣,更新程序也大不相同。有個比較出名的OSAU(參考了他的界面),但是有10個鏈接限制。微軟也有比較方便的ClickOnce。自己也嘗試了其他的,發現沒有合適的就決定自己寫一個。
考慮到復用,在.Net Framework2.0下開發。主要就是利用WebClient下載服務器網站目錄下的文件,安全性暫沒有考慮,比較適用於小型項目。
UpdateFileClient.exe/UpdateFile.xml/UpdateFileCommon.dll/UpdateFileClient.exe.config[可選] 為客戶端需要用到的文件
UpdateFileServer.exe/UpdateServer.xml/UpdateFileCommon.dll 為服務端需要用到的文件
注意事項:
1.UpdateFileClient.exe依賴於.Net Framwork 2.0,如果主程序的.Net Framwork版本高於2.0,需要添加UpdateFileClient.exe.config文件(默認是兼容4.0)。
如果主程序的.Net Framwork版本為2.0,請刪除UpdateFileClient.exe.config文件。
.Net Framwork 4.0是新的CLR,無法兼容舊版CLR。該方案主要兼容在Windows Xp下單獨安裝了.Net Framework 4.0 版本。
Windows Vista/Win7 已經分別安裝.Net Framework 2.0與3.5,具有CLR 2.0特性,需要刪除App.config。
主要功能
- 支持單個或多個文件更新
讀取服務端XML配置文件,獲取需要修改或新增的文件,然后進行下載,下載完成之后,更新本地版本。 - 支持更新更新程序本身
通過配置本地的XML文件,放置更新程序的目錄。主程序啟動時,進行檢查,處理。 - 服務端支持程序更改配置文件,無需手動更改XML
使用方式
-
配置服務端,需要能夠通過正常訪問XML和文件。一般采用新建一個web站點,發布到IIS的方式。
將UpdateFileServer.exe/UpdateServer.xml/UpdateFileCommon.dll 拷貝到服務端,通過UpdateFileServer.exe配置XML。


-
將主程序運行需要的文件通過XML配置起來
將Update.xml、UpdateFileClient.exe、UpdateFileCommon.dll添加到啟動程序相同目錄,主程序需要引用UpdateFileCommon.dll。
將啟動程序需要更新的文件通過XML進行配置,放在File節點下,初始版本為1。
配置服務端XML所在路徑,當前版本、版本對應的值、臨時文件夾、更新程序名稱可以采用默認值。
-
實現更新程序的更新
需要在主程序中添加一行代碼,進行檢查臨時文件夾是否包含更新程序,如果有,進行剪切操作。
using UpdateFileCommon;
//發現新的更新程序,進行剪切到根目錄
VersionHelper.CutNewUpdateEXE();
-
按需添加檢查更新代碼
可以在程序啟動時或者點擊按鈕進行檢查更新操作。
檢查更新是彈窗進行提醒,需要傳兩個參數,一個更新描述,一個是否強制更新。對應XML節點是服務端XML的ReleaseNote和IsMustUpdate。
NextShowEvent 事件是點擊按鈕下次提醒需要執行的操作。Winform
//默認的LoginView為登陸窗體
ApplicationContext context = new ApplicationContext(new LoginView());
//發現設定的目錄存在新的更新程序,進行剪切到根目錄
VersionHelper.CutNewUpdateEXE();
//檢查是否需要下載安裝包,不需要下載返回False
if (!VersionHelper.GetNewVersionToDownloadSetup())
{
//檢查版本更新
if (VersionHelper.IsRequiredUpdate())
{
string xmlPath = System.AppDomain.CurrentDomain.BaseDirectory + "UpdateFile.xml";
if (File.Exists(xmlPath))
{
//加載XML路徑
XmlDocument doc = new XmlDocument();
doc.Load(VersionHelper.GetLoaclServerConfigURL(xmlPath));
//獲取值
var releaseNote = VersionHelper.GetServiceReleaseNote(doc);
var isMustUpdate = VersionHelper.GetServiceIsMustUpdate(doc);
PromptingForm form = new PromptingForm(releaseNote, isMustUpdate);
//賦值委托,點擊下次提醒的按鈕執行的操作
form.NextShowEvent += delegate
{
//執行xxx
};
context = new ApplicationContext(form);
}
}
}
//do something
Application.Run(context);
WPF
WPF中需要特殊處理,在WPF項目中添加Program.cs文件,添加Main方法,項目右鍵屬性,設置Program為啟動對象。
[STAThread]
static void Main()
{
//發現設定的目錄存在新的更新程序,進行剪切到根目錄
VersionHelper.CutNewUpdateEXE();
//檢查是否需要下載安裝包,不需要下載返回False
if (!VersionHelper.GetNewVersionToDownloadSetup())
{
//檢查版本更新
if (VersionHelper.IsRequiredUpdate())
{
string xmlPath = System.AppDomain.CurrentDomain.BaseDirectory + "UpdateFile.xml";
if (File.Exists(xmlPath))
{
//加載XML路徑
XmlDocument doc = new XmlDocument();
doc.Load(VersionHelper.GetLoaclServerConfigURL(xmlPath));
//獲取值
var releaseNote = VersionHelper.GetServiceReleaseNote(doc);
var isMustUpdate = VersionHelper.GetServiceIsMustUpdate(doc);
PromptingForm form = new PromptingForm(releaseNote, isMustUpdate);
//賦值委托,點擊下次提醒的按鈕執行的操作
form.NextShowEvent += delegate
{
//執行xxx
};
//這里啟動PromptingForm窗體
form.ShowDialog();
}
}
}
//不需要更新時,默認啟動登陸窗體
else
{
LoginView view = new LoginView();
view.ShowDialog();
}
}
聯系我們
CheckUpdate.Net交流群 137867517 [點擊加群]
