private void CheckVersionForm_Load(object sender, EventArgs e) { Version serverVer = new Version(1, 0, 0, 0); ManifestResolver r = new ManifestResolver(Program.UpdateURL, VersionOption.Stable); try { r.Resolve(); serverVer = r.ReleaseManifest.Version; } catch { } lblLastest.Text = "最新版本 : " + serverVer; Version localVersion = new Version("1.0.0.0"); try { ReleaseManifest rm = new ReleaseManifest(); rm.Load(Path.Combine(Application.StartupPath, "release.xml")); localVersion = rm.Version; } catch { localVersion = MainForm.Version; } lblCurrent.Text = "目前版本 : " + localVersion.ToString(); }
/// 需要在某個時機呼叫這個,一般來說是在 MainForm Load 的事件中。 /// </summary> internal static void Update() { string basePath = System.Windows.Forms.Application.StartupPath; //更新位置。 string appUrl = "http://module.ischool.com.tw/module/89/MOD_ischedule/app.xml"; if (System.IO.File.Exists(Path.Combine(System.Windows.Forms.Application.StartupPath, "測試版本"))) appUrl = "http://10.1.1.167/modules/FiscaAEModules/MOD_ischedule/app.xml"; string script_path = Path.Combine(basePath, "update_padding.xml"); ManifestResolver resolver = new ManifestResolver(appUrl, VersionOption.Stable); resolver.VerifySignature = true; UpdateHelper uc = new UpdateHelper(); uc.Resolver = resolver; uc.Install = new InstallDescriptor(basePath); //更新過程的訊息。 resolver.ProgressMessage += new EventHandler<ProgressMessageEventArgs>(au_ProgressMessage); uc.DownloadStarted += new EventHandler(au_DownloadStarted); uc.DownloadProgressChanged += new EventHandler<DownloadProgressEventHandler>(au_DownloadProgressChanged); uc.DownloadCompleted += new EventHandler(au_DownloadCompleted); uc.ProgressMessage += new EventHandler<ProgressMessageEventArgs>(au_ProgressMessage); //MainForm.SetBarMessage("檢查更新…"); ThreadPool.QueueUserWorkItem(arg => { resolver.Resolve(); if (uc.CheckUpdate()) { PaddingScript script = new PaddingScript(); script.WaitRelease(System.Reflection.Assembly.GetExecutingAssembly().Location); uc.Update(script); script.Delete(uc.Install.TemporalFolder); script.Delete(script_path); script.DeleteEmpty(basePath); script.StartProcess(System.Reflection.Assembly.GetExecutingAssembly().Location); script.Save(script_path); MessageBox.Show("系統自動更新完成,將重新啟動。"); Application.Restart(); } else { //MessageBox.Show("已經是最新版。"); } }); }
async Task <int> Handle(IConsole console, string cluster, string path) { var client = JetfireClientFactory.CreateClient(secrets, cluster); var absolutePath = Path.GetFullPath(path); var manifests = Directory.EnumerateFiles(absolutePath, "*.*", SearchOption.AllDirectories) .Where(path => manifestFileExtensions.Any(ext => path.EndsWith(ext))) .SelectMany(path => { var yaml = File.ReadAllText(path); var manifests = parser.ParseManifests(yaml); return(manifests.Select(manifest => (path, manifest))); }) .ToList(); var duplicateExternalIds = manifests .GroupBy(x => x.manifest.ExternalId) .Where(group => group.Count() > 1); if (duplicateExternalIds.Any()) { console.Error.WriteLine($"Error: Manifests contain duplicate externalIds:"); foreach (var group in duplicateExternalIds) { console.Error.WriteLine($"ExternalId '{group.Key}' is defined in the following files:"); foreach (var(duplicatedPath, duplicatedTransform) in group) { var relativeDuplicatedPath = Path.GetRelativePath(duplicatedPath, absolutePath); console.Error.WriteLine($"- '{relativeDuplicatedPath}' (name: {duplicatedTransform.Name})"); } console.Error.WriteLine(""); } return(1); } var resolver = new ManifestResolver(secrets); var resolveResults = manifests.Select(t => resolver.Resolve(t.manifest, t.path)); var errorResults = resolveResults.Where(x => x.IsError).ToArray(); if (errorResults.Any()) { console.Error.WriteLine("Error: Found invalid transformation manifests:"); console.Error.WriteLine(); foreach (var result in errorResults) { var formattedExternalId = result.ResolvedManifest?.Transformation?.ExternalId ?? "null"; console.Error.WriteLine($"In '{result.ManifestPath}' (externalId: {formattedExternalId}):"); foreach (var error in result.Errors) { console.Error.WriteLine($" - {error}"); } console.Error.WriteLine(); } return(1); } var existingTransforms = await client.TransformConfigList(); var deployment = new Deployment(console, client, existingTransforms); foreach (var result in resolveResults) { var externalId = result.ResolvedManifest.Transformation.ExternalId; try { await deployment.Deploy(result.ResolvedManifest); } catch (Exception e) { console.Error.WriteLine($"Failed to deploy transformation '{externalId}':"); console.Error.WriteLine(e.ToString()); console.Error.WriteLine(); return(1); } } return(0); }