312 lines
15 KiB
C#
312 lines
15 KiB
C#
using BreakpointTransmission.Client;
|
|
using Microsoft.Win32;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Navigation;
|
|
using System.Windows.Shapes;
|
|
using CL.IO.Zip;
|
|
using Lib = ESSupport.Lib;
|
|
using System.Threading.Tasks;
|
|
using System.Web;
|
|
using System.Diagnostics;
|
|
using System.Configuration;
|
|
|
|
namespace EShangUpdateRelease
|
|
{
|
|
/// <summary>
|
|
/// MainWindow.xaml 的交互逻辑
|
|
/// </summary>
|
|
public partial class MainWindow : Window
|
|
{
|
|
private enum UpdateType
|
|
{
|
|
ServiceSite,
|
|
PosRelease
|
|
}
|
|
string UpLoadPack { get; set; }
|
|
//CreateRequestHeadersHandler _Handler = new CreateRequestHeadersHandler();
|
|
private BreakpointUploader uploader;
|
|
private BackgroundWorker _ReleaseBackgroundWorker;
|
|
private IAsyncResult asyncResult;
|
|
private string UploadUri;
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
try
|
|
{
|
|
UploadUri = ConfigurationManager.AppSettings["DefaultUploadUrl"];
|
|
}
|
|
catch
|
|
{
|
|
UploadUri = "http://192.168.11.192:11000";
|
|
}
|
|
uploader = new BreakpointUploader(1024 * 1024 * 1, UploadType.Append);
|
|
uploader.OnUploading += Uploader_OnUploading;
|
|
_ReleaseBackgroundWorker = new BackgroundWorker();
|
|
_ReleaseBackgroundWorker.DoWork += BackgroundWorker_DoWork;
|
|
_ReleaseBackgroundWorker.WorkerReportsProgress = true;
|
|
_ReleaseBackgroundWorker.WorkerSupportsCancellation = true;
|
|
cboServerpark.Items.Add("ServiceInstall");
|
|
cboServerpark.Items.Add("ServiceUpdate");
|
|
}
|
|
|
|
private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
|
|
{
|
|
|
|
string[] _EventArgs = e.Argument as string[];
|
|
if (_EventArgs.Count() == 0)
|
|
{
|
|
return;
|
|
}
|
|
string _FolderPath = _EventArgs[0];
|
|
int _Count = 0;
|
|
Lib.FileHelper.DeleteFiles(_FolderPath, new string[] { ".pw" }, false, false, ref _Count);
|
|
ZipHandler _ZipHandler = ZipHandler.GetInstance();
|
|
string _ZipPath = AppDomain.CurrentDomain.BaseDirectory + _FolderPath.Substring(_FolderPath.LastIndexOf("\\") + 1) + ".zip";
|
|
string _PassWord = DateTime.Now.ToString("yyyyMMddHHmmss");
|
|
FileStream _FileStream = File.Create(_FolderPath + "\\" + _PassWord + ".pw");
|
|
_FileStream.Close();
|
|
_ZipHandler.PackDirectory(_FolderPath, _ZipPath, _PassWord, (ProgressPercentage) =>
|
|
{
|
|
MessageBeginInvoke(ProgressPercentage.ToString(), "downProgress", "ProgressBar");
|
|
});
|
|
//CreateRequestHeadersHandler _Handler = new CreateRequestHeadersHandler("ServiceSite");
|
|
Upload(_ZipPath, UploadUri, "ServiceSite");
|
|
}
|
|
void Uploader_OnUploading(object sender, UploadEventArgs e)
|
|
{
|
|
if (e.Length == 0L)
|
|
{
|
|
MessageBeginInvoke("0", "downProgress", "ProgressBar");
|
|
}
|
|
else
|
|
{
|
|
MessageBeginInvoke(((decimal)e.Position / e.Length * 100).ToString("F2"), "downProgress", "ProgressBar");
|
|
}
|
|
}
|
|
private void Upload(string filePath, string uploadUrl, string uploadType, string updateContent = "")
|
|
{
|
|
try
|
|
{
|
|
UploadStatus status = uploader.Upload(filePath, uploadUrl);
|
|
if (status == UploadStatus.Completed)
|
|
{
|
|
System.Threading.Thread.Sleep(1000);
|
|
MessageBeginInvoke("100", "downProgress", "ProgressBar");
|
|
if (uploadType == "PosRelease")
|
|
{
|
|
string _MD5 = Lib.FileHelper.GetMD5ByMD5CryptoService(filePath);
|
|
string _FileName = System.IO.Path.GetFileNameWithoutExtension(filePath);
|
|
object[] args = { _FileName, _MD5, uploadType, updateContent };
|
|
string _Result = Lib.WSHelper.InvokeWebService(UploadUri + "/Update.asmx", "UpdateRelease", args).ToString();
|
|
MessageBox.Show(_Result);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
}
|
|
|
|
private void Button_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
Button _Button = sender as Button;
|
|
System.Windows.Forms.FolderBrowserDialog _FolderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog
|
|
{
|
|
Description = "请选择更新文件所在的文件夹"
|
|
};
|
|
OpenFileDialog _OpenFileDialog = new OpenFileDialog
|
|
{
|
|
InitialDirectory = AppDomain.CurrentDomain.BaseDirectory
|
|
};
|
|
switch (_Button.Name)
|
|
{
|
|
case "BtFolderBrowser":
|
|
if (_FolderBrowserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
|
{
|
|
TxtPath.Text = _FolderBrowserDialog.SelectedPath;
|
|
if (File.Exists(System.IO.Path.Combine(_FolderBrowserDialog.SelectedPath, "TouchCashier.exe")))
|
|
{
|
|
TxtSoftVersion.Text = FileVersionInfo.GetVersionInfo(System.IO.Path.Combine(_FolderBrowserDialog.SelectedPath, "TouchCashier.exe")).ProductVersion;
|
|
}
|
|
else if (File.Exists(System.IO.Path.Combine(_FolderBrowserDialog.SelectedPath, "cashier.exe")))
|
|
{
|
|
TxtSoftVersion.Text = FileVersionInfo.GetVersionInfo(System.IO.Path.Combine(_FolderBrowserDialog.SelectedPath, "cashier.exe")).ProductVersion;
|
|
}
|
|
}
|
|
break;
|
|
case "BtFilePack":
|
|
if (RBtService.IsChecked == true)
|
|
{
|
|
string _FolderPath = TxtPath.Text.Trim();
|
|
string _FileType = cboServerpark.Text;
|
|
if (String.IsNullOrWhiteSpace(_FileType))
|
|
{
|
|
MessageBox.Show("请选择安装包类型");
|
|
return;
|
|
}
|
|
if (String.IsNullOrWhiteSpace(_FolderPath))
|
|
{
|
|
return;
|
|
}
|
|
string _FilePath = AppDomain.CurrentDomain.BaseDirectory + "UpdatePack\\" + _FileType;
|
|
TaskFactory _Task = new TaskFactory();
|
|
_Task.StartNew(() =>
|
|
{
|
|
int _Count = 0;
|
|
Lib.FileHelper.CopyOldFilesToNewFiles(_FolderPath, _FilePath);
|
|
Lib.FileHelper.DeleteFiles(_FilePath, new string[] { ".pw" }, false, false, ref _Count);
|
|
ZipHandler _ZipHandler = ZipHandler.GetInstance();
|
|
string _ZipPath = AppDomain.CurrentDomain.BaseDirectory + _FilePath.Substring(_FilePath.LastIndexOf("\\") + 1) + ".zip";
|
|
UpLoadPack = _ZipPath;
|
|
string _PassWord = DateTime.Now.ToString("yyyyMMddHHmmss");
|
|
FileStream _FileStream = File.Create(_FilePath + "\\" + _PassWord + ".pw");
|
|
_FileStream.Close();
|
|
_ZipHandler.PackDirectory(_FilePath, _ZipPath, _PassWord, (ProgressPercentage) =>
|
|
{
|
|
MessageBeginInvoke(ProgressPercentage.ToString(), "downProgress", "ProgressBar");
|
|
});
|
|
MessageBox.Show("打包完成");
|
|
});
|
|
}
|
|
else if (RBtPos.IsChecked == true)
|
|
{
|
|
string _FolderPath = TxtPath.Text.Trim();
|
|
string _SoftVersion = TxtSoftVersion.Text.Trim();
|
|
if (String.IsNullOrWhiteSpace(_SoftVersion))
|
|
{
|
|
MessageBox.Show("请输入版本号");
|
|
return;
|
|
}
|
|
if (String.IsNullOrWhiteSpace(_FolderPath))
|
|
{
|
|
return;
|
|
}
|
|
string _FilePath = AppDomain.CurrentDomain.BaseDirectory + "UpdatePack\\" + _SoftVersion;
|
|
//if (!Directory.Exists(_FilePath + "\\UpdateFiles\\"))
|
|
//{
|
|
// Directory.CreateDirectory(_FilePath + "\\UpdateFiles\\");
|
|
//}
|
|
TaskFactory _Task = new TaskFactory();
|
|
_Task.StartNew(() =>
|
|
{
|
|
int _Count = 0;
|
|
Lib.FileHelper.CopyOldFilesToNewFiles(_FolderPath, _FilePath + "\\UpdateFiles\\", ".rar");
|
|
Lib.FileHelper.DeleteFiles(_FilePath, new string[] { ".pw" }, false, false, ref _Count);
|
|
System.Threading.Thread.Sleep(1000);
|
|
ZipHandler _ZipHandler = ZipHandler.GetInstance();
|
|
string _ZipPath = AppDomain.CurrentDomain.BaseDirectory + _FilePath.Substring(_FilePath.LastIndexOf("\\") + 1) + ".zip";
|
|
UpLoadPack = _ZipPath;
|
|
string _PassWord = DateTime.Now.ToString("yyyyMMddHHmmss");
|
|
FileStream _FileStream = File.Create(_FilePath + "\\" + _PassWord + ".pw");
|
|
_FileStream.Close();
|
|
_ZipHandler.PackDirectory(_FilePath, _ZipPath, _PassWord, (ProgressPercentage) =>
|
|
{
|
|
MessageBeginInvoke(ProgressPercentage.ToString(), "downProgress", "ProgressBar");
|
|
});
|
|
MessageBox.Show("打包完成");
|
|
});
|
|
}
|
|
break;
|
|
case "BtFileUpload":
|
|
if (asyncResult == null || asyncResult.IsCompleted)
|
|
{
|
|
if (RBtService.IsChecked == true)
|
|
{
|
|
if (_OpenFileDialog.ShowDialog() == true)
|
|
{
|
|
asyncResult = new Action<string, string, string>((filePath, uploadUrl, uploadType) =>
|
|
{
|
|
Header.M_Headers = new KeyValuePair<string, string>("x-file-type", HttpUtility.UrlEncode(uploadType));
|
|
Upload(filePath, uploadUrl, uploadType);
|
|
//_ReleaseBackgroundWorker.RunWorkerAsync(new string[] { _FolderBrowserDialog.SelectedPath, "ServiceSite" });
|
|
}).BeginInvoke(_OpenFileDialog.FileName, UploadUri + "/UploadRelease", "ServiceSite", null, null);
|
|
}
|
|
}
|
|
else if (RBtPos.IsChecked == true)
|
|
{
|
|
if (_OpenFileDialog.ShowDialog() == true)
|
|
{
|
|
asyncResult = new Action<string, string, string, string>((filePath, uploadUrl, uploadType, updateContent) =>
|
|
{
|
|
Header.M_Headers = new KeyValuePair<string, string>("x-file-type", HttpUtility.UrlEncode(uploadType));
|
|
//CreateRequestHeadersHandler _Handler = new CreateRequestHeadersHandler(uploadType);
|
|
Upload(filePath, uploadUrl, uploadType, updateContent);
|
|
}).BeginInvoke(_OpenFileDialog.FileName, UploadUri + "/UploadRelease", "PosRelease", txtUpdateContent.Text.Trim(), null, null);
|
|
}
|
|
//_ReleaseBackgroundWorker.RunWorkerAsync(new string[] { _FolderBrowserDialog.SelectedPath, "PosRelease" });
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("请选择上传类型");
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
#region 控件操作委托
|
|
/// <summary>
|
|
/// 控件线程委托
|
|
/// </summary>
|
|
/// <param name="Msg">消息内容</param>
|
|
/// <param name="ControlName">控件名称</param>
|
|
/// <param name="ControlType">控件类型</param>
|
|
delegate void DelegateMessage(string Msg, string ControlName, string ControlType);
|
|
|
|
/// <summary>
|
|
/// 线程委托操作事件
|
|
/// </summary>
|
|
/// <param name="Msg">消息内容</param>
|
|
/// <param name="ControlName">控件名称</param>
|
|
/// <param name="ControlType">控件类型</param>
|
|
private void MessageBeginInvoke(string Msg, string ControlName, string ControlType)
|
|
{
|
|
Dispatcher.BeginInvoke(new DelegateMessage(MessageHandle), new object[] { Msg, ControlName, ControlType });
|
|
}
|
|
|
|
/// <summary>
|
|
/// 线程消息操作
|
|
/// </summary>
|
|
/// <param name="Msg">消息内容</param>
|
|
/// <param name="ControlName">控件名称</param>
|
|
/// <param name="ControlsType">控件类型</param>
|
|
private void MessageHandle(string Msg, string ControlName, string ControlsType)
|
|
{
|
|
switch (ControlsType)
|
|
{
|
|
case "ProgressBar":
|
|
if (double.TryParse(Msg, out double _Value))
|
|
{
|
|
ProgressBar _ProgressBar = (ProgressBar)FindName(ControlName);
|
|
_ProgressBar.Value = _Value;
|
|
}
|
|
break;
|
|
case "Label":
|
|
Label _Label = (Label)FindName(ControlName);
|
|
_Label.Content = Msg;
|
|
break;
|
|
case "Image":
|
|
Image _Image = (Image)FindName(ControlName);
|
|
_Image.Source = new BitmapImage(new Uri(Msg, UriKind.Relative));
|
|
break;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
}
|