365 lines
14 KiB
C#
365 lines
14 KiB
C#
|
using CsharpHttpHelper.Down;
|
|||
|
using DevExpress.XtraEditors;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Diagnostics;
|
|||
|
using System.IO;
|
|||
|
using System.Text;
|
|||
|
using System.Windows.Forms;
|
|||
|
using UI.Framework.Forms;
|
|||
|
|
|||
|
namespace Grant.Framework
|
|||
|
{
|
|||
|
public partial class UpdateSoft : BaseForm
|
|||
|
{
|
|||
|
public UpdateSoft(List<assembly> list)
|
|||
|
{
|
|||
|
InitializeComponent();
|
|||
|
this.list = list;
|
|||
|
}
|
|||
|
|
|||
|
List<assembly> list;
|
|||
|
private void UpdateSoft_Load(object sender, EventArgs e)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
string html = GetStringBulider(list);
|
|||
|
this.webBrowser1.DocumentText = html;
|
|||
|
var temp = Process.GetCurrentProcess().MainModule.FileName;
|
|||
|
var index = temp.LastIndexOf("\\");
|
|||
|
path = temp.Substring(0, index + 1);
|
|||
|
exe = temp.Substring(index + 1);
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
}
|
|||
|
public string path;
|
|||
|
public string exe;
|
|||
|
string GetStringBulider(List<assembly> list)
|
|||
|
{
|
|||
|
StringBuilder builer = new StringBuilder();
|
|||
|
try
|
|||
|
{
|
|||
|
builer.Append("<!DOCTYPE html>").Append("\r\n");
|
|||
|
builer.Append("<html lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\">").Append("\r\n");
|
|||
|
builer.Append("<head>").Append("\r\n");
|
|||
|
builer.Append(" <meta charset=\"utf-8\" />").Append("\r\n");
|
|||
|
builer.Append(" <title></title>").Append("\r\n");
|
|||
|
builer.Append("</head>").Append("\r\n");
|
|||
|
builer.Append("<body style=\"background-color:floralwhite\">").Append("\r\n");
|
|||
|
foreach (assembly item in list)
|
|||
|
{
|
|||
|
builer.Append(" <fieldset>").Append("\r\n");
|
|||
|
builer.Append(" <legend>版本编号:" + item.version + "</legend>").Append("\r\n");
|
|||
|
builer.Append(" ").Append("\r\n");
|
|||
|
builer.Append(" <ul style=\"list-style:decimal\">").Append("\r\n");
|
|||
|
string[] infos = item.message.Split(new string[] { "\r\n" }, StringSplitOptions.None);
|
|||
|
foreach (string info in infos)
|
|||
|
{
|
|||
|
if (string.IsNullOrWhiteSpace(info)) continue;
|
|||
|
builer.Append("<li>" + info + "</li>").Append("\r\n");
|
|||
|
}
|
|||
|
builer.Append(" </ul>").Append("\r\n");
|
|||
|
builer.Append(" </fieldset>").Append("\r\n");
|
|||
|
builer.Append(" <br>").Append("\r\n");
|
|||
|
}
|
|||
|
|
|||
|
builer.Append("").Append("\r\n");
|
|||
|
builer.Append("</body>").Append("\r\n");
|
|||
|
builer.Append("</html>").Append("\r\n");
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
return builer.ToString();//结果
|
|||
|
}
|
|||
|
|
|||
|
private static Stream st = null;
|
|||
|
private static Stream so = null;
|
|||
|
|
|||
|
internal static void DownloadFile(string URL, string filename, ProgressBarControl prog)
|
|||
|
{
|
|||
|
float percent = 0;
|
|||
|
try
|
|||
|
{
|
|||
|
if (File.Exists(filename))
|
|||
|
File.Delete(filename);
|
|||
|
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;
|
|||
|
prog.Invoke(new Action(delegate
|
|||
|
{
|
|||
|
prog.Properties.Maximum = (int)totalBytes;
|
|||
|
|
|||
|
}));
|
|||
|
|
|||
|
st = myrp.GetResponseStream();
|
|||
|
so = new System.IO.FileStream(filename, System.IO.FileMode.Create);
|
|||
|
try
|
|||
|
{
|
|||
|
long totalDownloadedByte = 0;
|
|||
|
byte[] by = new byte[1024];
|
|||
|
int osize = st.Read(by, 0, (int)by.Length);
|
|||
|
while (osize > 0)
|
|||
|
{
|
|||
|
totalDownloadedByte = osize + totalDownloadedByte;
|
|||
|
Application.DoEvents();
|
|||
|
so.Write(by, 0, osize);
|
|||
|
prog.Invoke(new Action(delegate { prog.Position = (int)totalDownloadedByte; }));
|
|||
|
osize = st.Read(by, 0, (int)by.Length);
|
|||
|
percent = (float)totalDownloadedByte / (float)totalBytes * 100;
|
|||
|
Application.DoEvents(); //必须加注这句代码,否则label1将因为循环执行太快而来不及显示信息
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
if (so != null)
|
|||
|
{
|
|||
|
so.Close();
|
|||
|
so.Dispose();
|
|||
|
so = null;
|
|||
|
}
|
|||
|
if (st != null)
|
|||
|
{
|
|||
|
st.Close();
|
|||
|
st.Dispose();
|
|||
|
st = null;
|
|||
|
}
|
|||
|
throw ex;
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
if (so != null)
|
|||
|
{
|
|||
|
so.Close();
|
|||
|
so.Dispose();
|
|||
|
so = null;
|
|||
|
}
|
|||
|
if (st != null)
|
|||
|
{
|
|||
|
st.Close();
|
|||
|
st.Dispose();
|
|||
|
st = null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
throw ex;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void UpdateSoft_FormClosing(object sender, FormClosingEventArgs e)
|
|||
|
{
|
|||
|
if (so != null)
|
|||
|
{
|
|||
|
so.Close();
|
|||
|
so.Dispose();
|
|||
|
so = null;
|
|||
|
}
|
|||
|
if (st != null)
|
|||
|
{
|
|||
|
st.Close();
|
|||
|
st.Dispose();
|
|||
|
st = null;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void download(string path, string dir)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
FileDownloader loader = new FileDownloader(path, dir, (int)5);
|
|||
|
loader.data.Clear();
|
|||
|
|
|||
|
this.Invoke(new MethodInvoker(() =>
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
statusBar_process.Properties.Maximum = (int)loader.getFileSize();
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
}
|
|||
|
}));
|
|||
|
DownloadProgressListener linstenter = new DownloadProgressListener();
|
|||
|
linstenter.doSendMsg = new DownloadProgressListener.dlgSendMsg(SendMsgHander);
|
|||
|
loader.download(linstenter);
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
DownMsg msg = new DownMsg();
|
|||
|
msg.tag = -1;
|
|||
|
SendMsgHander(msg);
|
|||
|
//Console.WriteLine(ex.Message);
|
|||
|
}
|
|||
|
}
|
|||
|
private void SendMsgHander(DownMsg msg)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
switch (msg.tag)
|
|||
|
{
|
|||
|
case 1:
|
|||
|
this.Invoke(new MethodInvoker(() =>
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
statusBar_process.Position = (int)msg.size;
|
|||
|
float count = (float)statusBar_process.Position / (float)statusBar_process.Properties.Maximum;
|
|||
|
//Console.WriteLine(msg.size + " " + msg.speed);
|
|||
|
if (statusBar_process.Properties.Maximum == msg.size)
|
|||
|
{
|
|||
|
stop.Stop();
|
|||
|
this.statusBar_process.Position = 100;
|
|||
|
|
|||
|
WriteUpdateLog(list);
|
|||
|
Grant.Framework.GrantClient.StartProcess(path + "\\ZipExtract.exe", exe + " Update.zip");
|
|||
|
is_update = true;
|
|||
|
this.DialogResult = DialogResult.OK;
|
|||
|
this.Close();
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "更新失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
}
|
|||
|
}));
|
|||
|
break;
|
|||
|
case -1:
|
|||
|
MessageBox.Show("下载失败");
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
}
|
|||
|
|
|||
|
public void WriteUpdateLog(List<assembly> new_log)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var file = path + "\\Cache\\Update.log";
|
|||
|
string text = string.Empty;
|
|||
|
if (File.Exists(file))
|
|||
|
{
|
|||
|
text = File.ReadAllText(file);
|
|||
|
if (text.Length > 2000)
|
|||
|
{
|
|||
|
text.Remove(1000, 1000);
|
|||
|
text = text.Trim();
|
|||
|
text += "...";
|
|||
|
}
|
|||
|
}
|
|||
|
StringBuilder sb = new StringBuilder();
|
|||
|
foreach (var item in new_log)
|
|||
|
{
|
|||
|
sb.Append(item.version);
|
|||
|
sb.Append("\r\n");
|
|||
|
sb.Append(item.message);
|
|||
|
sb.Append("\r\n\r\n");
|
|||
|
}
|
|||
|
sb.Append(text);
|
|||
|
File.WriteAllText(file, sb.ToString());
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
}
|
|||
|
Stopwatch stop;
|
|||
|
private void button1_Click(object sender, EventArgs e)
|
|||
|
{
|
|||
|
if (this.button1.Text == "开始更新")
|
|||
|
{
|
|||
|
this.button1.Text = "更新中...";
|
|||
|
this.button1.Enabled = false;
|
|||
|
try
|
|||
|
{
|
|||
|
System.Threading.ThreadPool.QueueUserWorkItem(f =>
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var asy = System.Reflection.Assembly.GetExecutingAssembly();
|
|||
|
string c = System.IO.Directory.GetCurrentDirectory();
|
|||
|
var a = list[0];
|
|||
|
DownloadFile(a.url, c + "\\Update.zip", this.statusBar_process);
|
|||
|
//string exe = "ZipExtract.exe";
|
|||
|
//Grant.Framework.GrantClient.StartProcess(c + "\\" + exe, asy.ManifestModule.Name + " Update.zip");
|
|||
|
WriteUpdateLog(list);
|
|||
|
this.is_update = true;
|
|||
|
GrantClient.StartProcess(c + "\\ZipExtract.exe", exe + " Update.zip");
|
|||
|
this.Invoke(new Action(delegate
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
this.DialogResult = DialogResult.OK;
|
|||
|
this.Close();
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{
|
|||
|
}
|
|||
|
}));
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
this.Invoke(new Action(delegate
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "更新失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
}));
|
|||
|
}
|
|||
|
catch (Exception)
|
|||
|
{ }
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
this.Invoke(new Action(delegate
|
|||
|
{
|
|||
|
MessageBox.Show(ex.Message, "更新失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|||
|
this.button1.Text = "更新";
|
|||
|
this.button1.Enabled = true;
|
|||
|
}));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
string c = System.IO.Directory.GetCurrentDirectory();
|
|||
|
public bool is_update = false;
|
|||
|
|
|||
|
//private void DownThread_doSendMsg(CsharpHttpHelper.Down.DownMsg msg)
|
|||
|
//{
|
|||
|
// this.Invoke(new Action(delegate
|
|||
|
// {
|
|||
|
// switch (msg.Tag)
|
|||
|
// {
|
|||
|
// case CsharpHttpHelper.Down.DownStatus.Start:
|
|||
|
// break;
|
|||
|
// case CsharpHttpHelper.Down.DownStatus.GetLength:
|
|||
|
// //this.Invoke(new Action(delegate
|
|||
|
// //{
|
|||
|
// // this.statusBar_process.Properties.Maximum = (int)msg.Length;
|
|||
|
// //}));
|
|||
|
// break;
|
|||
|
// case CsharpHttpHelper.Down.DownStatus.DownLoad:
|
|||
|
// this.statusBar_process.Position = (int)msg.Progress;
|
|||
|
// break;
|
|||
|
// case CsharpHttpHelper.Down.DownStatus.End:
|
|||
|
// this.statusBar_process.Position = 100;
|
|||
|
// // string exe = "ZipExtract.exe";
|
|||
|
// // var location = this.GetType().Assembly.Location;
|
|||
|
// Grant.Framework.GrantClient.StartProcess(path + "\\ZipExtract.exe" ,exe +" Update.zip");
|
|||
|
// is_update = true;
|
|||
|
// this.Close();
|
|||
|
// break;
|
|||
|
// case CsharpHttpHelper.Down.DownStatus.Error:
|
|||
|
// ShowError(msg.ErrMessage);
|
|||
|
// this.Close();
|
|||
|
// break;
|
|||
|
// default:
|
|||
|
// break;
|
|||
|
// }
|
|||
|
// }));
|
|||
|
//}
|
|||
|
}
|
|||
|
}
|