先來看一下程序完成后長什么樣。
這個是程序的組成部分。
主要功能是在InitializationUpdate這個類中完成的,From1主要起到調用的作用,所以重心還是在InitializationUpdate這個類上,下面我們來看一下這個類完成了什么工作,都是如何完成的。
先調用兩個類:
//使用WebClient下載
public WebClient client = new WebClient();
待會兒下載更新文件要用到
還有幾個全局變量
//當前版本
public string localversion = null;
//最新版本
public string latesversion = null;
//主窗體
public Form1 form;
//通知內容
public string nnidtext = null;
//獲取本地版本號
public void NowVersion()
{
System.Diagnostics.FileVersionInfo fv = System.Diagnostics.FileVersionInfo.GetVersionInfo("新云翻譯器.exe");
localversion = fv.FileVersion;
}
這個方法幫我們拿到目前軟件的版本,因為我們要拿到的版本號是我們要更新的軟件的版本號,而不是本軟件的版本號,這里需要注意下,別搞錯了。
/// <summary>
/// 從服務器上獲取最新的版本號
/// </summary>
public void DownloadCheckUpdatexml()
{
try
{
//第一個參數是文件的地址,第二個參數是文件保存的路徑文件名
client.DownloadFile(http://cloudyours.net/Software//Update/NewcloudTranslator/NewcloudTranslator221210.XML, @"Update/NewcloudTranslator221210.XML");
}
catch
{
nnidtext = "沒有檢測到更新";
Environment.Exit(0);
}
}
我們用這個方法從服務器上拿到最新的軟件版本,之后會進行對比。
/// <summary>
/// 讀取從服務器獲取的最新版本號
/// </summary>
public void LatestVersion()
{
if (File.Exists(@"Update/NewcloudTranslator221210.XML"))
{
XmlDocument doc = new XmlDocument();
//加載要讀取的XML
doc.Load(@"Update/NewcloudTranslator221210.XML");
//獲得根節點
XmlElement WriteBook = doc.DocumentElement;
//獲得子節點 返回節點的集合
XmlNodeList Update = WriteBook.ChildNodes;
foreach (XmlNode item in Update)
{
latesversion = item.InnerText;
}
}
else if (!File.Exists(@"Update/NewcloudTranslator221210.XML"))
{
nnidtext = "檢查更新失敗";
Environment.Exit(0);
}
}
這個方法就是用來讀取我們拿到的文檔,然后存儲一下,后面會用到。
/// <summary>
/// 下載安裝包
/// </summary>
public void DownloadInstall()
{
if (localversion == latesversion)
{
nnidtext = "恭喜你,已經更新到最新版本";
}
else if (localversion != latesversion && File.Exists(@"Update/NewcloudTranslator221210.XML"))
{
nnidtext = "發現新版本,即將下載更新補丁";
client.DownloadFile("http://cloudtours.net/Software//Update/NewcloudTranslator/NewCloudTranslator2_2_1_210_Setup.exe", @"Update/NewCloudTranslator2_2_1_210_Setup.exe");
if (File.Exists(@"Update/NewCloudTranslator2_2_1_210_Setup.exe"))
{
InstallandDelete();//這里調用安裝的類
}
else if (!File.Exists(@"Update/NewCloudTranslator2_2_1_210_Setup.exe"))
{
//如果一次沒有下載成功,則檢查三次
for (int i = 1; i < 3; i++)
{
client.DownloadFile("http://cloudtours.net/Software//Update/NewcloudTranslator/NewCloudTranslator2_2_1_210_Setup.exe", @"Update/NewCloudTranslator2_2_1_210_Setup.exe");
}
nnidtext = "下載失敗,請檢查您的網絡連接是否正常";
Environment.Exit(0);
}
}
}
這個方法是用來下載安裝包的,先對比一下我們讀取到的最新版本號和本地版本號,如果一樣就不用下載安裝包,如果不一樣就下載更新。
/// <summary>
/// 安裝及刪除
/// </summary>
PRivate void InstallandDelete()
{
//安裝前關閉正在運行的程序
KillProgram();
//啟動安裝程序
Process.Start(@"Update/NewCloudTranslator2_2_1_210_Setup.exe");
JudgeInstall();
}
這個方法就簡單了,就打開一下我們的安裝包,之后調用幾個其他方法,其他方法會在下面附上。
/// <summary>
/// 判斷安裝進程是否???在
/// </summary>
public void JudgeInstall()
{
Process[] processList = Process.GetProcesses();
foreach (Process process in processList)
{
if (process.ProcessName == "NewCloudTranslator2_2_1_210_Setup.exe")
{
process.Kill();
File.Delete(@"Update/NewCloudTranslator2_2_1_210_Setup.exe");
File.Delete(@"Update/NewcloudTranslator221210.XML");
}
else
{
File.Delete(@"Update/NewCloudTranslator2_2_1_210_Setup.exe");
File.Delete(@"Update/NewcloudTranslator221210.XML");
return;
}
}
}
這個方法就完成了簡單的刪除更新文件的。
/// <summary>
/// 結束程序
/// </summary>
public void KillProgram()
{
Process[] processList = Process.GetProcesses();
foreach (Process process in processList)
{
//如果程序啟動了,則殺死
if (process.ProcessName == "新云翻譯器.exe")
{
process.Kill();
}
}
}
有幾個方法中用到了這個方法,并沒有什么技術含量。
到這里就結束了,這個程序就算做完了,其實蠻簡單的,就看你沒有想到這點。
注:轉載請注明出處:http://www.49028c.com/skylgmg/p/4792990.html
新聞熱點
疑難解答