Candy.Client.Models.CandyApplication.UpdateAsync C# (CSharp) Method

UpdateAsync() public method

このアプリケーションを適用可能な最新版に更新します。
public UpdateAsync ( ) : System.Threading.Tasks.Task
return System.Threading.Tasks.Task
        public override async Task UpdateAsync()
        {
            // Candy.Updater.exe だけは Candy.exe 側で書き換える
            var client = new HttpClient();

            var updateServiceUrl = GetUpdateServiceUrl();
            var json = await client.GetStringAsync(updateServiceUrl).ConfigureAwait(false);
            var latest = JsonConvert.DeserializeObject<UpdateSummary>(json);

            using (var stream = await client.GetStreamAsync(latest.PackagePath).ConfigureAwait(false))
            using (var archive = new ZipArchive(stream, ZipArchiveMode.Read))
            {
                var entry = archive.GetEntry("Candy.Updater.exe");

                if (entry != null)
                {
                    using (var updater = entry.Open())
                    using (var dest = File.OpenWrite("Candy.Updater.exe"))
                    {
                        dest.SetLength(0);
                        await updater.CopyToAsync(dest).ConfigureAwait(false);
                    }
                }
            }

            var arguments = String.Format(@"-n ""{0}"" -p ""{1}"" -u ""{2}"" -s",
                                          DisplayName.Replace("\"", "\\\""),
                                          InstalledPath,
                                          updateServiceUrl);

            var process = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = "Candy.Updater.exe",
                    Arguments = arguments,
                },
            };
            process.Start();

            // 自身を終了させる(Candy.Updater.exe は Candy.exe が終了するまで待機してくれる)
            Application.Current.Shutdown();

            // 完了しないタスクで呼出元をアプリケーション終了まで待機させ続ける
            await _never.ConfigureAwait(false);
        }
    }