private static async Task CheckUpgrade(StarClient client, String channel) { var ug = new Stardust.Web.Upgrade { Log = XTrace.Log }; // 检查更新 var ur = await client.Upgrade(channel); if (ur != null && ur.Version != _lastVersion) { ug.Url = ur.Source; await ug.Download(); // 检查文件完整性 if (ur.FileHash.IsNullOrEmpty() || ug.CheckFileHash(ur.FileHash)) { // 执行更新,解压缩覆盖文件 var rs = ug.Update(); if (rs && !ur.Executor.IsNullOrEmpty()) { ug.Run(ur.Executor); } _lastVersion = ur.Version; // 去除多余入口文件 ug.Trim("StarAgent"); // 强制更新时,马上重启 if (rs && ur.Force) { //StopWork("Upgrade"); // 重新拉起进程 var star = "XCoder.exe"; XTrace.WriteLine("强制升级,拉起进程 {0} -upgrade", star.GetFullPath()); Process.Start(star.GetFullPath(), "-upgrade"); //var p = Process.GetCurrentProcess(); //p.Close(); //p.Kill(); Application.Exit(); } } } }
private async Task CheckUpgrade(Object data) { var client = _Client; // 运行过程中可能改变配置文件的通道 var channel = AgentSetting.Channel; var ug = new Upgrade { Log = XTrace.Log }; // 去除多余入口文件 ug.Trim("StarAgent"); // 检查更新 var ur = await client.Upgrade(channel); if (ur != null && ur.Version != _lastVersion) { ug.Url = ur.Source; await ug.Download(); // 检查文件完整性 if (ur.FileHash.IsNullOrEmpty() || ug.CheckFileHash(ur.FileHash)) { // 执行更新,解压缩覆盖文件 var rs = ug.Update(); if (rs && !ur.Executor.IsNullOrEmpty()) { ug.Run(ur.Executor); } _lastVersion = ur.Version; // 去除多余入口文件 ug.Trim("StarAgent"); // 强制更新时,马上重启 if (rs && ur.Force) { // 以服务方式运行时,重启服务,否则采取拉起进程的方式 if (Host is Host host && host.InService) { rs = Host.Restart("StarAgent"); } else { // 重新拉起进程 rs = ug.Run("StarAgent", "-run -upgrade"); if (rs) { StopWork("Upgrade"); } } if (rs) { ug.KillSelf(); } } } }