|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
namespace AutoUpdater
|
|
|
|
|
{
|
|
|
|
|
static class Program
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 应用程序的主入口点。
|
|
|
|
|
/// </summary>
|
|
|
|
|
[STAThread]
|
|
|
|
|
static void Main(string[] args)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Process instance = RunningInstance();
|
|
|
|
|
if (instance == null)
|
|
|
|
|
{
|
|
|
|
|
Application.EnableVisualStyles();
|
|
|
|
|
Application.SetCompatibleTextRenderingDefault(false);
|
|
|
|
|
|
|
|
|
|
//args = new string[] { "373001" , "000001", "00065" , "cy2" , "1", "x86" , "0.0.7" , "POSV.exe" , "0"};
|
|
|
|
|
|
|
|
|
|
if (args.Length == 9)
|
|
|
|
|
{
|
|
|
|
|
string tenantId = args[0];
|
|
|
|
|
string storeNo = args[1];
|
|
|
|
|
string posNo = args[2];
|
|
|
|
|
string appSign = args[3];
|
|
|
|
|
string versionType = args[4];
|
|
|
|
|
string terminalType = args[5];
|
|
|
|
|
string versionNum = args[6];
|
|
|
|
|
string starter = args[7];
|
|
|
|
|
var tenantType = Convert.ToInt16(args[8]);
|
|
|
|
|
|
|
|
|
|
Global.Instance.StartApplication = starter;
|
|
|
|
|
|
|
|
|
|
//静默升级
|
|
|
|
|
var backUpload = BackDownload.BackUpload();
|
|
|
|
|
if (backUpload)
|
|
|
|
|
{
|
|
|
|
|
//静默升级成功,关闭
|
|
|
|
|
Logger.Log("静默升级成功!");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//传入的参数
|
|
|
|
|
//开放平台是否连接
|
|
|
|
|
var openApiTask = Task.Factory.StartNew<bool>(() => { return OpenApiUtils.IsAvailable(); });
|
|
|
|
|
//判断网络是否正常
|
|
|
|
|
Task.WaitAll(openApiTask);
|
|
|
|
|
|
|
|
|
|
bool isConnected = openApiTask.Result;
|
|
|
|
|
|
|
|
|
|
Global.Instance.isConnected = isConnected;
|
|
|
|
|
|
|
|
|
|
if (Global.Instance.isConnected)
|
|
|
|
|
{
|
|
|
|
|
VersionObject vobject = OpenApiUtils.GetVersionObject(tenantId, terminalType , storeNo, posNo , appSign , versionType , versionNum , starter);
|
|
|
|
|
if (vobject != null && vobject.HasNew)
|
|
|
|
|
{
|
|
|
|
|
if (vobject.ForceUpload == 1)
|
|
|
|
|
{
|
|
|
|
|
//强制升级,静默升级
|
|
|
|
|
var backDownload = new BackDownload(vobject);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//提示升级
|
|
|
|
|
MainForm mainForm = new MainForm(vobject);
|
|
|
|
|
if (DialogResult.OK == mainForm.ShowDialog())
|
|
|
|
|
{
|
|
|
|
|
Application.Run(new Downloading());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Logger.Log("目前已经是最新版本!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Logger.Log("网络连接不正常,无法正常升级。");
|
|
|
|
|
|
|
|
|
|
Application.Exit();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Logger.Log("传入参数非法,无法正常升级!");
|
|
|
|
|
|
|
|
|
|
Application.Exit();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
HandleRunningInstance(instance);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
ExceptionUtils.Current.Handle(ex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 实现只启动一个进程
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public static Process RunningInstance()
|
|
|
|
|
{
|
|
|
|
|
Process current = Process.GetCurrentProcess();
|
|
|
|
|
Process[] processes = Process.GetProcessesByName(current.ProcessName);
|
|
|
|
|
foreach (Process process in processes)
|
|
|
|
|
{
|
|
|
|
|
if (process.Id != current.Id)
|
|
|
|
|
{
|
|
|
|
|
if (Assembly.GetExecutingAssembly().Location.Replace("/" , "\\") == current.MainModule.FileName)
|
|
|
|
|
{
|
|
|
|
|
return process;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
public static void HandleRunningInstance(Process instance)
|
|
|
|
|
{
|
|
|
|
|
ShowWindowAsync(instance.MainWindowHandle , WS_SHOWNORMAL);
|
|
|
|
|
SetForegroundWindow(instance.MainWindowHandle);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[DllImport("User32.dll")]
|
|
|
|
|
private static extern bool ShowWindowAsync(IntPtr hWnd , int cmdShow);
|
|
|
|
|
|
|
|
|
|
[DllImport("User32.dll")]
|
|
|
|
|
private static extern bool SetForegroundWindow(IntPtr hWnd);
|
|
|
|
|
private const int WS_SHOWNORMAL = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|