注塑喷涂
You can not 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
7.3 KiB

using System;
using System.ComponentModel;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Text;
using System.Windows.Forms;
//using Ionic.Zip;
namespace ChangKeTec.Wms.Updater
{
public partial class FormAutoUpdate : Form
{
readonly Timer timer = new Timer();
readonly string _remoteZipFile = GlobalVar.ServerUrl+GlobalVar.FilePath+"/"+GlobalVar.FileName;
readonly string _localZipFile = Application.StartupPath+"\\"+GlobalVar.FileName;
private int _percent = 0;
private readonly string _updatePath =Application.StartupPath+"\\"+GlobalVar.FileName.Remove(GlobalVar.FileName.IndexOf(".zip"));
//$"{Application.StartupPath}\\{GlobalVar.FileName.Remove(GlobalVar.FileName.IndexOf(".zip"))}";
public FormAutoUpdate()
{
InitializeComponent();
timer.Tick += TimerTick;
if (File.Exists(_localZipFile))
{
try
{
File.Delete(_localZipFile);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
if (Directory.Exists(_updatePath))
{
try
{
Directory.Delete(_updatePath, true);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//检查服务端是否有新版本程序
GetUpdateFile();
timer.Enabled = true;
}
private void GetUpdateFile()
{
try
{
var wc = new WebClient();
//wc.DownloadFile(download, filename);
wc.DownloadFileAsync(new Uri(_remoteZipFile), _localZipFile);
wc.DownloadProgressChanged += wc_DownloadProgressChanged;
wc.DownloadFileCompleted += wc_DownloadFileCompleted;
wc.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
//解压下载后的文件
if (File.Exists(_localZipFile))
{
//后改的 先解压滤波zip植入ini然后再重新压缩
if (!Directory.Exists(_updatePath))
{
Directory.CreateDirectory(_updatePath);
}
//开始解压压缩包
ZipFile.ExtractToDirectory(_localZipFile, _updatePath);
/*
using (ZipFile zip = ZipFile.Read(_localZipFile))
{
zip.ExtractAll(_updatePath, ExtractExistingFileAction.OverwriteSilently);
}
*/
try
{
//复制新文件替换旧文件
DirectoryInfo folder = new DirectoryInfo(_updatePath);
foreach (FileInfo file in folder.GetFiles())
{
if(file.Name.Contains("Ionic.Zip.dll"))continue;
if(file.Name.Contains("Updater"))continue;
File.Copy(file.FullName, Application.StartupPath+"\\"+file.Name, true);
}
var destPath = Application.StartupPath;
foreach (var dir in folder.GetDirectories())
{
var destDirName = destPath+"\\"+dir.Name;
var sourceDirName = dir.FullName;
CopyDirectory(sourceDirName,destDirName);
}
//Directory.Delete(_updatePath, true);
File.Delete(_localZipFile);
//覆盖完成 重新启动程序
System.Diagnostics.Process process = new System.Diagnostics.Process
{
StartInfo =
{
FileName = GlobalVar.SoftWareName,
WorkingDirectory = Application.StartupPath,
CreateNoWindow = true
}
};
//要掉用得exe路径例如:"C:\windows";
process.Start();
Application.Exit();
}
catch (Exception ex)
{
MessageBox.Show("请关闭系统后重新执行更新操作!"+Environment.NewLine +
ex.Message);
Application.Exit();
}
}
}
private void CopyDirectory(string sourceDirName, string destDirName)
{
try
{
if (!Directory.Exists(destDirName))
{
Directory.CreateDirectory(destDirName);
File.SetAttributes(destDirName, File.GetAttributes(sourceDirName));
}
if (destDirName[destDirName.Length - 1] != Path.DirectorySeparatorChar)
destDirName = destDirName + Path.DirectorySeparatorChar;
string[] files = Directory.GetFiles(sourceDirName);
foreach (string file in files)
{
if (File.Exists(destDirName + Path.GetFileName(file)))
File.Delete(destDirName + Path.GetFileName(file));
File.Copy(file, destDirName + Path.GetFileName(file), true);
File.SetAttributes(destDirName + Path.GetFileName(file), FileAttributes.Normal);
// total++;
}
string[] dirs = Directory.GetDirectories(sourceDirName);
foreach (string dir in dirs)
{
CopyDirectory(dir, destDirName + Path.GetFileName(dir));
}
}
catch (Exception ex)
{
StreamWriter sw = new StreamWriter(Application.StartupPath+"\\"+ "log.txt", true);
sw.Write(ex.Message+ DateTime.Now+Environment.NewLine);
sw.Close();
}
}
private void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
_percent = e.ProgressPercentage;
pbDownload.Value = e.ProgressPercentage;
}
private void TimerTick(object sender, EventArgs e)
{
lblPercent.Text = @"下载进度:"+_percent+"%";
if (_percent == 100)
{
timer.Enabled = false;
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void FormAutoUpdate_Load(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("下载地址:"+_remoteZipFile);
sb.AppendLine("新程序版本:"+GlobalVar.NewVersion);
sb.AppendLine("更新说明:");
sb.AppendLine(GlobalVar.Desc);
txtDesc.Text = sb.ToString();
}
}
}