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.

149 lines
5.5 KiB
C#

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;
}
}