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