自動更新的軟件的目的在于讓客戶不在為了尋找最新軟件花費時間。也不用去到開發(fā)商的網站上查找。客戶端的軟件自動會在程序啟動前查找服務器上最新的版本。和自己當前軟件的版本比較,如果服務器的是最新版本??蛻舳藙t進行自動下載、解壓、安裝。當然了下載是要有網絡的,并且用戶可以根據提示去完成操作。再也不用為找不到最新版本的軟件而頭疼。
轉自:http://blog.csdn.net/lybwwp/article/details/8426022
<?xml version= "1.0" encoding= "utf-8" ?> |
<Content> |
<Project id= "程序名稱" Edition= "1.0" > </Project> |
</Content> |
using System; |
using System.Collections.Generic; |
using System.Windows.Forms; |
using Medicine_ERP; |
using DevExpress.XtraEditors; |
using System.Xml; |
using Anshield_AutoFutures.BaseClase; |
namespace Anshield_AutoFutures |
{ |
static class Program |
{ |
private static void LoadMath() |
{ |
//服務器上的版本號 |
string NewEdition = "1.0" ; |
//應用程序中的版本號 |
string OldEdition = "1.0" ; |
try |
{ |
//服務器上的版本號 |
NewEdition = webserverClase.getCopyRightCode(); |
//獲取系統(tǒng)中xml里面存儲的版本號 |
String fileName = Application.StartupPath + "\\XMLEdition.xml" ; |
XmlDocument xmlDoc = new XmlDocument(); |
xmlDoc.Load(fileName); |
XmlNode xn = xmlDoc.SelectSingleNode( "Content" ); |
XmlNodeList xnl = xn.ChildNodes; |
foreach (XmlNode xnf in xnl) |
{ |
XmlElement xe = (XmlElement)xnf; |
if (xe.GetAttribute( "id" ) == "jigou_plz" ) |
{ |
OldEdition = xe.GetAttribute( "Edition" ); //動態(tài)數組 |
} |
break ; |
} |
double newE = double .Parse(NewEdition); |
double oldE = double .Parse(OldEdition); |
//比較兩個版本號,判斷應用程序是否要更新 |
if (newE > oldE) |
{ |
//更新程序¨ |
DialogResult dr = XtraMessageBox.Show( "發(fā)現(xiàn)新的版本是否要更新該軟件" , "平浪舟現(xiàn)貨程序化交易--更新提示" , MessageBoxButtons.OKCancel, MessageBoxIcon.Information); |
if (dr == DialogResult.OK) |
{ |
//打開下載窗口 |
// Application.Run(new DownUpdate()); |
//啟動安裝程序 |
System.Diagnostics.Process.Start(Application.StartupPath + @"\Upgrade_Form.exe" ); |
Application.Exit(); |
} |
else |
{ |
//若用戶取消,打開初始界面 |
anshield_Login login = new anshield_Login(); |
if (login.ShowDialog() == DialogResult.OK) |
{ |
Application.Run( new Main_AutoFutures()); |
} |
} |
} |
else |
{ |
//若服務器版本低于或相等客戶端,打開初始界面 |
anshield_Login login = new anshield_Login(); |
if (login.ShowDialog() == DialogResult.OK) |
{ |
Application.Run( new Main_AutoFutures()); |
} |
} |
} |
catch |
{ |
XtraMessageBox.Show( "網絡鏈接失??!" , "提示" , MessageBoxButtons.OK, MessageBoxIcon.Error); |
} |
} |
|
/// <summary> |
/// 應用程序的主入口點。 |
/// </summary> |
[STAThread] |
static void Main() |
{ |
|
//保證同時只有一個客戶端在運行 |
System.Threading.Mutex mutexMyapplication = new System.Threading.Mutex( false , "jigou_plz.exe" ); |
if (!mutexMyapplication.WaitOne(100, false )) |
{ |
XtraMessageBox.Show( "程序" + Application.ProductName + "已經在運行!" , "警告" , MessageBoxButtons.OK, MessageBoxIcon.Warning); |
return ; |
} |
else |
{ |
Application.EnableVisualStyles(); |
Application.SetCompatibleTextRenderingDefault( false ); |
//漢化 |
hugengyong hu = new hugengyong(); |
DevExpress.UserSkins.OfficeSkins.Register(); |
DevExpress.Skins.SkinManager.EnableFormSkins(); |
DevExpress.UserSkins.BonusSkins.Register(); |
LoadMath(); |
} |
} |
} |
} |
|
|
//該代碼片段來自于: http://www.sharejs.com/codes/csharp/6043 |
//debug目錄,用于存放壓縮文件 |
string path = Application.StartupPath; |
private void btnDown_Click( object sender, EventArgs e) |
{ |
string zipFile = path + @"\jigou_plz.zip" ; |
//關閉原有的應用程序 |
killProess(); |
|
btnDown.Enabled = false ; |
button2.Enabled = false ; |
//自動下載壓縮包,并且解壓,最后關閉當前進程,進行安裝 |
try |
{ |
//下載自動更新 |
string downUrl = ConfigurationManager.ConnectionStrings[ "DownUrl" ].ConnectionString.ToString().Trim(); |
if (! string .IsNullOrEmpty(downUrl)) |
{ |
DownloadFile(downUrl, zipFile, progressBar1, label1); |
} |
else |
{ |
MessageBox.Show( "Config中的下載路徑配置錯誤!" , "錯誤" , MessageBoxButtons.OK, MessageBoxIcon.Error); |
return ; |
} |
} |
catch |
{ |
MessageBox.Show( "當前沒有網絡或者文件地址不正確" ); |
return ; |
} |
//解a壓1 |
try |
{ |
//關閉原有的應用程序 |
killProess(); |
//unCompressRAR(path, path, "setup.rar", true); |
BaseClase.Zip.UnZip(zipFile, path, "" , true , true ); |
|
} |
catch (Exception ex) |
{ |
MessageBox.Show(ex.Message); |
return ; |
} |
if (MessageBox.Show( "升級完成!,請重新登陸!" , "提示" , MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK) |
{ |
FileInfo file = new FileInfo(path + @"\Anshield_AutoFutures.exe" ); //文件地址 |
if (file.Exists) |
{ |
Process.Start(path + @"\Anshield_AutoFutures.exe" ); |
} |
Application.Exit(); |
} |
|
} |
/// <summary> |
/// c#.net 下載文件 |
/// </summary> |
/// <param name="URL">下載文件地址</param> |
/// |
/// <param name="Filename">下載后的存放地址</param> |
/// <param name="Prog">用于顯示的進度條</param> |
/// |
public void DownloadFile( string URL, string filename, System.Windows.Forms.ProgressBar prog, System.Windows.Forms.Label label1) |
{ |
float percent = 0; |
try |
{ |
System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL); |
System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse(); |
long totalBytes = myrp.ContentLength; |
if (prog != null ) |
{ |
prog.Maximum = ( int )totalBytes; |
} |
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 byte [1024]; |
int osize = st.Read(by, 0, ( int )by.Length); |
while (osize > 0) |
{ |
totalDownloadedByte = osize + totalDownloadedByte; |
System.Windows.Forms.Application.DoEvents(); |
so.Write(by, 0, osize); |
if (prog != null ) |
{ |
prog.Value = ( int )totalDownloadedByte; |
} |
osize = st.Read(by, 0, ( int )by.Length); |
percent = ( float )totalDownloadedByte / ( float )totalBytes * 100; |
label1.Text = "下載進度" + percent.ToString() + "%" ; |
System.Windows.Forms.Application.DoEvents(); //必須加注這句代碼,否則label1將因為循環(huán)執(zhí)行太快而來不及顯示信息 |
} |
label1.Text = "下載完成。安裝中... ..." ; |
so.Flush(); //將緩沖區(qū)內在寫入到基礎流中 |
st.Flush(); //將緩沖區(qū)內在寫入到基礎流中 |
so.Close(); |
st.Close(); |
} |
catch (System.Exception) |
{ |
throw ; |
} |
} |
|
/// <summary> |
/// 關閉原有的應用程序 |
/// </summary> |
private void killProess() |
{ |
this .label1.Text = "正在關閉程序...." ; |
System.Diagnostics.Process[] proc = System.Diagnostics.Process.GetProcessesByName( "Anshield_AutoFutures" ); |
//關閉原有應用程序的所有進程 |
foreach (System.Diagnostics.Process pro in proc) |
{ |
pro.Kill(); |
} |
} |
|
//該代碼片段來自于: http://www.sharejs.com/codes/csharp/6043 |
using System; |
using System.Collections.Generic; |
using System.Text; |
using System.IO; |
using System.IO.Compression; |
using ICSharpCode.SharpZipLib.Zip; |
namespace Upgrade_Form.BaseClase |
{ |
class Zip |
{ |
|
/// <summary> |
/// 解壓縮一個 zip 文件。 |
/// </summary> |
/// <param name="zipedFile">zip文件路徑</param> |
/// <param name="strDirectory">解壓路徑</param> |
/// <param name="password">zip文件的密碼</param> |
/// <param name="overWrite">是否覆蓋已存在的文件。</param> |
/// <param name="delteFile">解壓后是否刪除文件</param> |
public static void UnZip( string zipedFile, string strDirectory, string password, bool overWrite, bool delteFile) |
{ |
//路徑不存在則創(chuàng)建 |
if (Directory.Exists(strDirectory) == false ) |
{ |
Directory.CreateDirectory(strDirectory); |
} |
if (strDirectory == "" ) |
strDirectory = Directory.GetCurrentDirectory(); |
if (!strDirectory.EndsWith( "\\" )) |
strDirectory = strDirectory + "\\" ; |
using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipedFile))) |
{ |
s.Password = password; |
ZipEntry theEntry; |
while ((theEntry = s.GetNextEntry()) != null ) |
{ |
string directoryName = "" ; |
string pathToZip = "" ; |
pathToZip = theEntry.Name; |
if (pathToZip != "" ) |
directoryName = Path.GetDirectoryName(pathToZip) + "\\" ; |
string fileName = Path.GetFileName(pathToZip); |
Directory.CreateDirectory(strDirectory + directoryName); |
if (fileName != "" ) |
{ |
if ((File.Exists(strDirectory + directoryName + fileName) && overWrite) || (!File.Exists(strDirectory + directoryName + fileName))) |
{ |
using (FileStream streamWriter = File.Create(strDirectory + directoryName + fileName)) |
{ |
int size = 2048; |
byte [] data = new byte [2048]; |
while ( true ) |
{ |
size = s.Read(data, 0, data.Length); |
if (size > 0) |
streamWriter.Write(data, 0, size); |
else |
break ; |
} |
streamWriter.Close(); |
} |
} |
} |
} |
s.Close(); |
} |
if (delteFile == true ) |
{ |
File.Delete(zipedFile); |
} |
} |
} |
} |
//該代碼片段來自于: http://www.sharejs.com/codes/csharp/6043 |