initial checkin of yaulw (locally)
This commit is contained in:
121
@integrate/ClickOnceUpdater.cs
Normal file
121
@integrate/ClickOnceUpdater.cs
Normal file
@@ -0,0 +1,121 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Deployment.Application;
|
||||
using Forms = System.Windows.Forms;
|
||||
using System.Windows;
|
||||
using System.Diagnostics;
|
||||
using Watchdog.WatchdogLib.WinForms;
|
||||
using System.IO;
|
||||
|
||||
namespace Watchdog
|
||||
{
|
||||
/// <summary>
|
||||
/// Responsible for Dynamically Checking if there is an update available via ClickOnce
|
||||
/// </summary>
|
||||
public static class ClickOnceUpdater
|
||||
{
|
||||
/// <summary>
|
||||
/// Construction
|
||||
/// </summary>
|
||||
static ClickOnceUpdater(){}
|
||||
|
||||
/// <summary>
|
||||
/// Installs the Update and Restarts the Current Instance
|
||||
/// </summary>
|
||||
/// <returns>false if an error occured, if succesful * Will Restart the App *</returns>
|
||||
internal static bool InstallUpdateAndRestartIfSuccessful()
|
||||
{
|
||||
try
|
||||
{
|
||||
UpdateCheckInfo info = null;
|
||||
ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
|
||||
if (ad != null)
|
||||
{
|
||||
// Log this to make sure we are sane
|
||||
App.log.Info("Success in retrieving Application Deployment Manifest. This is a ClickOnce App");
|
||||
|
||||
try
|
||||
{
|
||||
info = ad.CheckForDetailedUpdate();
|
||||
}
|
||||
catch (DeploymentDownloadException dde)
|
||||
{
|
||||
MsgBox.ShowInfo("The new version of the application cannot be downloaded at this time. \n\nPlease check your network connection, or try again later. Error: " + dde.Message, "Unable to Download", System.Windows.Forms.MessageBoxButtons.OK);
|
||||
App.log.Info("The new version of the application cannot be downloaded at this time. \n\nPlease check your network connection, or try again later. Error: " + dde.Message);
|
||||
return false;
|
||||
}
|
||||
catch (InvalidDeploymentException ide)
|
||||
{
|
||||
MsgBox.ShowError("Cannot check for a new version of the application. The ClickOnce deployment is corrupt. Please redeploy the application and try again. Error: " + ide.Message, "Invalid Deployment", System.Windows.Forms.MessageBoxButtons.OK);
|
||||
App.log.Error("Cannot check for a new version of the application. The ClickOnce deployment is corrupt. Please redeploy the application and try again. Error: " + ide.Message);
|
||||
return false;
|
||||
}
|
||||
catch (InvalidOperationException ioe)
|
||||
{
|
||||
MsgBox.ShowError("This application cannot be updated. It is likely not a ClickOnce application. Error: " + ioe.Message, "Invalid Operation", System.Windows.Forms.MessageBoxButtons.OK);
|
||||
App.log.Error("This application cannot be updated. It is likely not a ClickOnce application. Error: " + ioe.Message);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (info.UpdateAvailable)
|
||||
{
|
||||
Boolean doUpdate = true;
|
||||
|
||||
if (!info.IsUpdateRequired)
|
||||
{
|
||||
Forms.DialogResult dr = MsgBox.ShowInfo("An update is available. Would you like to update\nthe application now?", "Update Available", Forms.MessageBoxButtons.OKCancel);
|
||||
if (!(Forms.DialogResult.OK == dr))
|
||||
doUpdate = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Display a message that the app MUST reboot. Display the minimum required version.
|
||||
MsgBox.ShowInfo("This application has detected a mandatory update from your\ncurrent " +
|
||||
"version to version " + info.MinimumRequiredVersion.ToString() +
|
||||
".\nThe application will now install\nthe update and restart.",
|
||||
"Update Available", System.Windows.Forms.MessageBoxButtons.OK);
|
||||
App.log.Info("This application has detected a mandatory update from your current " +
|
||||
"version to version " + info.MinimumRequiredVersion.ToString() +
|
||||
". The application will now install the update and restart.");
|
||||
}
|
||||
|
||||
if (doUpdate)
|
||||
{
|
||||
try
|
||||
{
|
||||
ad.Update();
|
||||
App.log.Info("The application has been upgraded,and will now restart.");
|
||||
|
||||
// Restart the Application * Imp! Auto-Delay the Start of the new Watchdog Instance *
|
||||
if(File.Exists(App.APPLICATION_CLICKONCE_STARTMENU_LINK))
|
||||
Process.Start(App.APPLICATION_CLICKONCE_STARTMENU_LINK, "15");
|
||||
|
||||
// Auto-Update * No Need to Close Applications *
|
||||
App.State_SpecialCircum_DontCloseApplicationsOnExit();
|
||||
Application.Current.Shutdown();
|
||||
return true;
|
||||
}
|
||||
catch (DeploymentDownloadException dde)
|
||||
{
|
||||
MsgBox.ShowError("Cannot install the latest version of the application. \n\nPlease check your network connection, or try again later. Error: " + dde, "Update Error", System.Windows.Forms.MessageBoxButtons.OK);
|
||||
App.log.Error("Cannot install the latest version of the application. \n\nPlease check your network connection, or try again later. Error: " + dde);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
App.log.Info("Newer Version not available at this time.");
|
||||
MsgBox.ShowInfo("A newer version of the application\nis not available at this time. \n\nPlease try again later.", "Newer Version not available", System.Windows.Forms.MessageBoxButtons.OK);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception) { /* ignore */ }
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user