You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

219 lines
8.1 KiB
C#

10 months ago
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;
namespace UpdateOnline
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string url = "http://update.dongshengsoft.com:8099/RecognitionTools.exe";
string orgFolder = System.AppDomain.CurrentDomain.BaseDirectory+ "RecognitionTools.exe";
orgFolder = orgFolder.Replace("UpdateOnline", "RecognitionTools");
KillProcess("RecognitionTools");
bool rst = DownLoadFile(url, orgFolder, this.progressBar1);
if (rst)
{
MessageBox.Show("更新成功!");
System.Diagnostics.Process.Start(orgFolder);
Application.Exit();
}
else
{
MessageBox.Show("更新失败!");
Application.Exit();
}
}
/// <summary>
/// 下载服务器文件至客户端
/// </summary>
/// <param name="strUrlFilePath">要下载的Web服务器上的文件地址全路径</param>
/// <param name="Dir">下载到的目录(存放位置,机地机器文件夹)</param>
/// <returns>True/False是否上传成功</returns>
public bool DownLoadFile(string strUrlFilePath, string strLocalDirPath)
{
// 创建WebClient实例
WebClient client = new WebClient();
//被下载的文件名
string fileName = strUrlFilePath.Substring(strUrlFilePath.LastIndexOf("/"));
//另存为的绝对路径+文件名
string Path = strLocalDirPath + fileName;
try
{
WebRequest myWebRequest = WebRequest.Create(strUrlFilePath);
}
catch (Exception exp)
{
MessageBox.Show("文件下载失败:" + exp.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
try
{
client.DownloadFile(strUrlFilePath, Path);
return true;
}
catch (Exception exp)
{
MessageBox.Show("文件下载失败:" + exp.Message, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
}
/// <summary>
/// 下载带进度条代码(普通进度条)
/// </summary>
/// <param name="URL">网址</param>
/// <param name="Filename">文件名</param>
/// <param name="Prog">普通进度条ProgressBar</param>
/// <returns>True/False是否下载成功</returns>
public bool DownLoadFile(string URL, string Filename, ProgressBar Prog)
{
try
{
System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL); //从URL地址得到一个WEB请求
System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse(); //从WEB请求得到WEB响应
long totalBytes = myrp.ContentLength; //从WEB响应得到总字节数
Prog.Maximum = (int)totalBytes; //从总字节数得到进度条的最大值
System.IO.Stream st = myrp.GetResponseStream(); //从WEB请求创建流
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; //更新文件大小
Application.DoEvents();
so.Write(by, 0, osize); //写流
Prog.Value = (int)totalDownloadedByte; //更新进度条
osize = st.Read(by, 0, (int)by.Length); //读流
}
so.Close(); //关闭流
st.Close(); //关闭流
return true;
}
catch(Exception e)
{
MessageBox.Show(e.Message);
return false;
}
}
/// <summary>
/// 下载带进度条代码(状态栏式进度条)
/// </summary>
/// <param name="URL">网址</param>
/// <param name="Filename">文件名</param>
/// <param name="Prog">状态栏式进度条ToolStripProgressBar</param>
/// <returns>True/False是否下载成功</returns>
public bool DownLoadFile(string URL, string Filename, ToolStripProgressBar Prog)
{
try
{
System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL); //从URL地址得到一个WEB请求
System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse(); //从WEB请求得到WEB响应
long totalBytes = myrp.ContentLength; //从WEB响应得到总字节数
Prog.Maximum = (int)totalBytes; //从总字节数得到进度条的最大值
System.IO.Stream st = myrp.GetResponseStream(); //从WEB请求创建流
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; //更新文件大小
Application.DoEvents();
so.Write(by, 0, osize); //写流
Prog.Value = (int)totalDownloadedByte; //更新进度条
osize = st.Read(by, 0, (int)by.Length); //读流
}
so.Close(); //关闭流
st.Close(); //关闭流
return true;
}
catch
{
return false;
}
}
public void startProcess(string fileName)
{
//定义一个ProcessStartInfo实例
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
//设置启动进程的初始目录
info.WorkingDirectory = Application.StartupPath;
//设置启动进程的应用程序或文档名
info.FileName = @fileName;
//设置启动进程的参数
info.Arguments = "";
//启动由包含进程启动信息的进程资源
try
{
System.Diagnostics.Process.Start(info);
}
catch (System.ComponentModel.Win32Exception we)
{
MessageBox.Show(this, we.Message);
return;
}
}
private void btnRestart_Click(object sender, EventArgs e)
{
string orgFolder = System.AppDomain.CurrentDomain.BaseDirectory + "RecognitionTools.exe";
orgFolder = orgFolder.Replace("UpdateOnline", "RecognitionTools");
System.Diagnostics.Process.Start(orgFolder);
Application.Exit();
}
private void KillProcess(string processName)
{
Process[] myproc = Process.GetProcesses();
foreach (Process item in myproc)
{
if (item.ProcessName == processName)
{
item.Kill();
}
}
}
}
}