本文整理汇总了C#中Squirrel.UpdateManager.ApplyReleases方法的典型用法代码示例。如果您正苦于以下问题:C# UpdateManager.ApplyReleases方法的具体用法?C# UpdateManager.ApplyReleases怎么用?C# UpdateManager.ApplyReleases使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Squirrel.UpdateManager
的用法示例。
在下文中一共展示了UpdateManager.ApplyReleases方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Update
private static async void Update(Task<string> result)
{
if (result.Result == null || result.Result != "1")
return;
try
{
using (var mgr = new UpdateManager(@"https://releases.noelpush.com/", "NoelPush"))
{
var updates = await mgr.CheckForUpdate();
if (updates.ReleasesToApply.Any())
{
var lastVersion = updates.ReleasesToApply.OrderBy(x => x.Version).Last();
await mgr.DownloadReleases(updates.ReleasesToApply);
await mgr.ApplyReleases(updates);
var latestExe = Path.Combine(mgr.RootAppDirectory, string.Concat("app-", lastVersion.Version), "NoelPush.exe");
mgr.Dispose();
RestartAppEvent();
UpdateManager.RestartApp(latestExe);
}
mgr.Dispose();
}
}
catch (Exception e)
{
LogManager.GetCurrentClassLogger().Error(e.Message);
}
}
示例2: UpdateApp
public async Task UpdateApp()
{
var updatePath = ConfigurationManager.AppSettings["UpdatePathFolder"];
var packageId = ConfigurationManager.AppSettings["PackageID"];
using (var mgr = new UpdateManager(updatePath, packageId, FrameworkVersion.Net45))
{
var updates = await mgr.CheckForUpdate();
if (updates.ReleasesToApply.Any())
{
var lastVersion = updates.ReleasesToApply.OrderBy(x => x.Version).Last();
await mgr.DownloadReleases(new[] { lastVersion });
await mgr.ApplyReleases(updates);
await mgr.UpdateApp();
MessageBox.Show("The application has been updated - please close and restart.");
}
else
{
MessageBox.Show("No Updates are available at this time.");
}
}
}
示例3: Update
public async Task Update(string updateUrl, string appName = null)
{
appName = appName ?? getAppNameFromDirectory();
this.Log().Info("Starting update, downloading from " + updateUrl);
using (var mgr = new UpdateManager(updateUrl, appName)) {
bool ignoreDeltaUpdates = false;
this.Log().Info("About to update to: " + mgr.RootAppDirectory);
retry:
try {
var updateInfo = await mgr.CheckForUpdate(ignoreDeltaUpdates: ignoreDeltaUpdates, progress: x => Console.WriteLine(x / 3));
await mgr.DownloadReleases(updateInfo.ReleasesToApply, x => Console.WriteLine(33 + x / 3));
await mgr.ApplyReleases(updateInfo, x => Console.WriteLine(66 + x / 3));
} catch (Exception ex) {
if (ignoreDeltaUpdates) {
this.Log().ErrorException("Really couldn't apply updates!", ex);
throw;
}
this.Log().WarnException("Failed to apply updates, falling back to full updates", ex);
ignoreDeltaUpdates = true;
goto retry;
}
var updateTarget = Path.Combine(mgr.RootAppDirectory, "Update.exe");
await this.ErrorIfThrows(() =>
mgr.CreateUninstallerRegistryEntry(),
"Failed to create uninstaller registry entry");
}
}
示例4: ButtonUpdate_Click
/// <summary>
/// Handles the Click event of the buttonUpdate control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
private async void ButtonUpdate_Click(object sender, EventArgs e)
{
string updateUrl = @"http://journaley.s3.amazonaws.com/stable";
string updateSrcFile = Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
"UpdateSource");
if (File.Exists(updateSrcFile))
{
updateUrl = File.ReadAllText(updateSrcFile, System.Text.Encoding.UTF8).Trim();
}
// Update Check
if (this.Owner is MainForm)
{
++((MainForm)this.Owner).UpdateProcessCount;
}
try
{
using (var mgr = new UpdateManager(updateUrl))
{
// Disable update check when in develop mode.
if (!mgr.IsInstalledApp)
{
MessageBox.Show("Checking for update is disabled in develop mode.", "Update Journaley");
return;
}
var updateInfo = await mgr.CheckForUpdate();
if (updateInfo == null)
{
MessageBox.Show("Failed to check for update.", "Update Journaley");
return;
}
if (updateInfo.ReleasesToApply.Any())
{
await mgr.DownloadReleases(updateInfo.ReleasesToApply);
await mgr.ApplyReleases(updateInfo);
MessageBox.Show(
"Journaley has been updated to v" +
updateInfo.ReleasesToApply.Max(x => x.Version) + ".\n" +
"Restart Journaley to use the new version.",
"Update Journaley");
this.UpdateAvailable = false;
if (this.Owner is MainForm)
{
((MainForm)this.Owner).UpdateAvailable = false;
}
}
else
{
MessageBox.Show("Journaley is already up to date!", "Update Journaley");
}
}
}
catch (Exception ex)
{
MessageBox.Show("Error occurred while updating.", "Update Journaley");
Logger.Log(ex.Message);
Logger.Log(ex.StackTrace);
}
finally
{
if (this.Owner is MainForm)
{
--((MainForm)this.Owner).UpdateProcessCount;
}
}
}
示例5: ApplyReleasesAsync
/// <summary>
/// Apply releases found and downloaded by a previous update check using Squirrel UpdateManager and return true when finished.
/// </summary>
/// <returns></returns>
public static async Task<string> ApplyReleasesAsync(UpdateInfo updateInfo)
{
var appName = GetAppName();
var updateLocation = GetUpdateLocation();
var ret = String.Empty;
_log.Debug("Apply Releases. Called " + Utilities.GetCallerName() + " with UpdateLocation = \"" + updateLocation + "\" and AppName = " + appName + "\".");
using (var mgr = new Squirrel.UpdateManager(updateLocation, appName, Squirrel.FrameworkVersion.Net45))
{
try
{
var s = await mgr.ApplyReleases(updateInfo).ConfigureAwait(false);
ret = s;
}
catch (Exception e)
{
_log.Error(Utilities.GetCallerName() + " error while applying releases with UpdateLocation = \"" + updateLocation + "\" and AppName = " + appName + ", thrown " + e.GetType().ToString() + " with message \"" + e.Message + "\".", e);
throw;
}
}
return ret;
}
示例6: SquirrelUpdate
private static async Task<bool> SquirrelUpdate(SplashScreenWindow splashScreenWindow, UpdateManager mgr, bool ignoreDelta = false)
{
try
{
Log.Info($"Checking for updates (ignoreDelta={ignoreDelta})");
splashScreenWindow.StartSkipTimer();
var updateInfo = await mgr.CheckForUpdate(ignoreDelta);
if(!updateInfo.ReleasesToApply.Any())
{
Log.Info("No new updated available");
return false;
}
var latest = updateInfo.ReleasesToApply.LastOrDefault()?.Version;
var current = mgr.CurrentlyInstalledVersion();
if(latest <= current)
{
Log.Info($"Installed version ({current}) is greater than latest release found ({latest}). Not downloading updates.");
return false;
}
if(IsRevisionIncrement(current?.Version, latest?.Version))
{
Log.Info($"Latest update ({latest}) is revision increment. Updating in background.");
splashScreenWindow.SkipUpdate = true;
}
Log.Info($"Downloading {updateInfo.ReleasesToApply.Count} {(ignoreDelta ? "" : "delta ")}releases, latest={latest?.Version}");
await mgr.DownloadReleases(updateInfo.ReleasesToApply, splashScreenWindow.Updating);
Log.Info("Applying releases");
await mgr.ApplyReleases(updateInfo, splashScreenWindow.Installing);
await mgr.CreateUninstallerRegistryEntry();
Log.Info("Done");
return true;
}
catch(Exception ex)
{
if(ignoreDelta)
return false;
if(ex is Win32Exception)
Log.Info("Not able to apply deltas, downloading full release");
return await SquirrelUpdate(splashScreenWindow, mgr, true);
}
}
示例7: Update
public async Task Update(string updateUrl, string appName = null)
{
appName = appName ?? getAppNameFromDirectory();
this.Log().Info("Starting update, downloading from " + updateUrl);
// NB: Always basing the rootAppDirectory relative to ours allows us to create Portable
// Applications
var ourDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "..");
using (var mgr = new UpdateManager(updateUrl, appName, FrameworkVersion.Net45, ourDir)) {
bool ignoreDeltaUpdates = false;
retry:
try {
var updateInfo = await mgr.CheckForUpdate(ignoreDeltaUpdates: ignoreDeltaUpdates, progress: x => Console.WriteLine(x / 3));
await mgr.DownloadReleases(updateInfo.ReleasesToApply, x => Console.WriteLine(33 + x / 3));
await mgr.ApplyReleases(updateInfo, x => Console.WriteLine(66 + x / 3));
} catch (Exception ex) {
if (ignoreDeltaUpdates) {
this.Log().ErrorException("Really couldn't apply updates!", ex);
throw;
}
this.Log().WarnException("Failed to apply updates, falling back to full updates", ex);
ignoreDeltaUpdates = true;
goto retry;
}
var updateTarget = Path.Combine(mgr.RootAppDirectory, "Update.exe");
await this.ErrorIfThrows(() =>
mgr.CreateUninstallerRegistryEntry(),
"Failed to create uninstaller registry entry");
}
}
示例8: CheckForUpdates
private IObservable<UpdateAvailableNotification> CheckForUpdates()
{
return Observable.Create<UpdateAvailableNotification>(async obs =>
{
string updateUrl = AppModel.GetRegistrySetting("UpdateUrl");
Log.DebugFormat("UpdateUrl = {0}", updateUrl);
using (var updateManager = new UpdateManager(updateUrl ?? @"http://bradleygrainger.com/GitBlame/download", "GitBlame", FrameworkVersion.Net45))
{
try
{
UpdateInfo updateInfo = await updateManager.CheckForUpdate();
var releases = updateInfo == null ? new List<ReleaseEntry>() : updateInfo.ReleasesToApply.ToList();
if (updateInfo == null)
Log.Info("CheckForUpdate returned (null)");
else
Log.InfoFormat("CheckForUpdate: Current=({0}), Future=({1}), {2} ReleasesToApply", ToLog(updateInfo.CurrentlyInstalledVersion), ToLog(updateInfo.FutureReleaseEntry), releases.Count);
if (releases.Count != 0)
{
await updateManager.DownloadReleases(releases);
Log.Info("Downloaded releases");
var newDirectory = await updateManager.ApplyReleases(updateInfo);
Log.InfoFormat("ApplyReleases: {0}", newDirectory);
if (!string.IsNullOrEmpty(newDirectory))
{
var newPath = Path.Combine(newDirectory, "GitBlame.exe");
VisualStudioIntegration.ReintegrateWithVisualStudio(newPath);
obs.OnNext(new UpdateAvailableNotification(newPath));
}
}
}
catch (TimeoutException ex)
{
// Failed to check for updates; try again the next time the app is run
Log.ErrorFormat("CheckForUpdates timed out: {0}", ex, ex.Message);
}
catch (Exception ex)
{
// Squirrel throws a new Exception in many failure scenarios
Log.ErrorFormat("CheckForUpdates failed: {0}", ex, ex.Message);
if (ex.InnerException != null)
Log.ErrorFormat("CheckForUpdates inner exception: {0}", ex.InnerException, ex.InnerException.Message);
}
}
obs.OnCompleted();
});
}
示例9: Update
public async Task Update(string updateUrl, string appName = null)
{
appName = appName ?? getAppNameFromDirectory();
this.Log().Info("Starting update, downloading from " + updateUrl);
using (var mgr = new UpdateManager(updateUrl, appName, FrameworkVersion.Net45)) {
var updateInfo = await mgr.CheckForUpdate(progress: x => Console.WriteLine(x / 3));
await mgr.DownloadReleases(updateInfo.ReleasesToApply, x => Console.WriteLine(33 + x / 3));
await mgr.ApplyReleases(updateInfo, x => Console.WriteLine(66 + x / 3));
}
// TODO: Update our installer entry
}
示例10: MainForm_Shown
/// <summary>
/// Handles the Shown event of the MainForm control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
private async void MainForm_Shown(object sender, EventArgs e)
{
string updateUrl = @"http://journaley.s3.amazonaws.com/stable";
string updateSrcFile = Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
"UpdateSource");
if (File.Exists(updateSrcFile))
{
updateUrl = File.ReadAllText(updateSrcFile, System.Text.Encoding.UTF8).Trim();
}
// Update Check
++this.UpdateProcessCount;
try
{
using (var mgr = new UpdateManager(updateUrl))
{
// Disable update check when in develop mode.
if (!mgr.IsInstalledApp)
{
return;
}
this.CurrentlyInstalledVersion = mgr.CurrentlyInstalledVersion();
var updateInfo = await mgr.CheckForUpdate();
if (updateInfo == null)
{
return;
}
if (updateInfo.ReleasesToApply.Any())
{
await mgr.DownloadReleases(updateInfo.ReleasesToApply);
// First, if the user already checked the auto-update option,
// simply apply them.
if (this.Settings.AutoUpdate)
{
await mgr.ApplyReleases(updateInfo);
return;
}
// Save the updateInfo and indicate that there is an available update.
this.UpdateInfo = updateInfo;
this.UpdateAvailable = true;
}
}
}
catch (Exception ex)
{
Logger.Log(ex.Message);
Logger.Log(ex.StackTrace);
}
finally
{
--this.UpdateProcessCount;
}
}