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 { /// /// 应用程序的主入口点。 /// [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(() => { 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); } } /// /// 实现只启动一个进程 /// /// 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; } }