/// <summary> /// Initializes a new instance of the AutoUpdateManifest class /// </summary> public AutoUpdateManifest() { _id = Guid.NewGuid().ToString(); _product = new AutoUpdateProductDescriptor(); _moreInfo = new AutoUpdateHref(); _changeSummaries = new AutoUpdateChangeSummaryList(); }
public static AutoUpdateProductDescriptor FromAssembly(Assembly assembly, Version version) { // create a product descriptor AutoUpdateProductDescriptor pd = new AutoUpdateProductDescriptor(); // grab its assembly name AssemblyName assemblyName = assembly.GetName(); // set the name of the product pd.Name = assemblyName.Name.Replace(".exe", null); // the version will be the starting folder name parsed to a version pd.Version = version; // create an assembly attribute reader AssemblyAttributeReader reader = new AssemblyAttributeReader(assembly); // set the product id ProductIdentifierAttribute pia = reader.GetProductIdentifierAttribute(); if (pia != null) { pd.Id = pia.Id; } // set whether the exe requires registration RequiresRegistrationAttribute rra = reader.GetRequiresRegistrationAttribute(); if (rra != null) { pd.RequiresRegistration = rra.RequiresRegistration; } return(pd); }
public static AutoUpdateProductDescriptor FromAssembly(Assembly assembly, Version version) { // create a product descriptor AutoUpdateProductDescriptor pd = new AutoUpdateProductDescriptor(); // grab its assembly name AssemblyName assemblyName = assembly.GetName(); // set the name of the product pd.Name = assemblyName.Name.Replace(".exe", null); // the version will be the starting folder name parsed to a version pd.Version = version; // create an assembly attribute reader AssemblyAttributeReader reader = new AssemblyAttributeReader(assembly); // set the product id ProductIdentifierAttribute pia = reader.GetProductIdentifierAttribute(); if (pia != null) pd.Id = pia.Id; // set whether the exe requires registration RequiresRegistrationAttribute rra = reader.GetRequiresRegistrationAttribute(); if (rra != null) pd.RequiresRegistration = rra.RequiresRegistration; return pd; }
/// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="product"></param> /// <param name="moreInfo"></param> /// <param name="changeSummaries"></param> /// <param name="urlOfUpdate"></param> /// <param name="sizeOfUpdate"></param> public AutoUpdateManifest(string id, AutoUpdateProductDescriptor product, AutoUpdateHref moreInfo, AutoUpdateChangeSummaryList changeSummaries, string urlOfUpdate, long sizeOfUpdate) { _id = id; _product = product; _moreInfo = moreInfo; _changeSummaries = changeSummaries; _urlOfUpdate = urlOfUpdate; _sizeOfUpdate = sizeOfUpdate; }
/// <summary> /// Instructs the AutoUpdateDownloader to query for the latest version available /// </summary> /// <param name="progressViewer">The progress viewer by which progress should be displayed</param> /// <param name="options">The options that affect this downloader</param> /// <param name="productToUpdate">The product descriptor for the product that should be updated</param> /// <param name="updateAvailable">The download descriptor that describes the download that could potentially occur</param> /// <returns></returns> public virtual bool QueryLatestVersion( IProgressViewer progressViewer, AutoUpdateOptions options, AutoUpdateProductDescriptor productToUpdate, out AutoUpdateDownloadDescriptor updateAvailable) { updateAvailable = null; return(false); }
/// <summary> /// Instructs the AutoUpdateDownloader to query for the latest version available /// </summary> /// <param name="progressViewer">The progress viewer by which progress should be displayed</param> /// <param name="options">The options that affect this downloader</param> /// <param name="productToUpdate">The product descriptor for the product that should be updated</param> /// <param name="updateAvailable">The download descriptor that describes the download that could potentially occur</param> /// <returns></returns> public virtual bool QueryLatestVersion( IProgressViewer progressViewer, AutoUpdateOptions options, AutoUpdateProductDescriptor productToUpdate, out AutoUpdateDownloadDescriptor updateAvailable) { updateAvailable = null; return false; }
/// <summary> /// Instructs the AutoUpdateDownloader to query for the latest version available /// </summary> /// <param name="progressViewer">The progress viewer by which progress should be displayed</param> /// <param name="options">The options that affect this downloader</param> /// <param name="productToUpdate">The product descriptor for the product that should be updated</param> /// <param name="updateAvailable">The download descriptor that describes the download that could potentially occur</param> /// <returns></returns> public override bool QueryLatestVersion(IProgressViewer progressViewer, AutoUpdateOptions options, AutoUpdateProductDescriptor productToUpdate, out AutoUpdateDownloadDescriptor updateAvailable) { updateAvailable = null; try { // create a manual web service proxy based on the url specified in the options Debug.WriteLine(string.Format("Creating a web service proxy to the following url.\n\tThe web service url is '{0}'.", options.WebServiceUrl), MY_TRACE_CATEGORY); AutoUpdateWebServiceProxy service = new AutoUpdateWebServiceProxy(options.WebServiceUrl); // use the web service to query for updates Debug.WriteLine(string.Format("Querying the web service for the latest version of '{0}'.\n\tThe current product's version is '{1}'.\n\tThe current product's id is '{2}'.\n\tThe web service url is '{3}'.", productToUpdate.Name, productToUpdate.Version.ToString(), productToUpdate.Id, options.WebServiceUrl), MY_TRACE_CATEGORY); XmlNode node = service.QueryLatestVersionEx(productToUpdate.Name, productToUpdate.Version.ToString(), productToUpdate.Id); // if the service returned no results, then there is no update availabe if (node == null) { // bail out Debug.WriteLine(string.Format("No updates are available from the web service at '{0}' for this product.", options.WebServiceUrl), MY_TRACE_CATEGORY); return false; } // otherwise create a reader and try and read the xml from the xml node returned from the web service XmlAutoUpdateManifestReader reader = new XmlAutoUpdateManifestReader(node); // using the reader we can recreate the manifeset from the xml AutoUpdateManifest manifest = reader.Read(); /* * now create a download descriptor that says, yes we have found an update. * we are capable of downloading it, according to these options. * the autoupdate manager will decide which downloader to use to download the update * */ updateAvailable = new AutoUpdateDownloadDescriptor(manifest, this, options); // just to let everyone know that there is a version available Debug.WriteLine(string.Format("Version '{0}' of '{1}' is available for download.\n\tThe download url is '{2}'.\n\tThe size of the download is {3}.", updateAvailable.Manifest.Product.Version.ToString(), updateAvailable.Manifest.Product.Name, updateAvailable.Manifest.UrlOfUpdate, this.FormatFileLengthForDisplay(updateAvailable.Manifest.SizeOfUpdate)), MY_TRACE_CATEGORY); // we've successfully queried for the latest version of the product to update return true; } catch(ThreadAbortException) { } catch(Exception ex) { throw new Exception(ex.Message, ex); } return false; }
/// <summary> /// Initializes a new instance of the AutoUpdateManager class /// </summary> /// <param name="options">The options that will control the behaviour of the engine</param> /// <param name="productToUpdate">A product descriptor that will be used as the product to find updates for</param> public AutoUpdateManager(AutoUpdateOptions options, AutoUpdateProductDescriptor productToUpdate) { Debug.Assert(options != null); Debug.Assert(productToUpdate != null); /* * however if we wanted to not do the norm * and create an update engine that could update another app * then we are all about it, makes no never mind at all * */ _options = options; _productToUpdate = productToUpdate; _downloaders = new AutoUpdateDownloaderList(); _downloaders.AddRange(this.CreateDownloadersForInternalUse()); if (_options.DownloadPath == null || _options.DownloadPath == string.Empty) _options.DownloadPath = this.GetBootstrapPath(); }
/// <summary> /// Initializes a new instance of the AutoUpdateManager class /// </summary> /// <param name="options">The options that will control the behaviour of the engine</param> public AutoUpdateManager(AutoUpdateOptions options) { // we can't do anything without options to control our behavior Debug.Assert(options != null); /* * the default options will be used * to update the current hosting engine * and download into the bootstrap directory along side the other versions of this hosting engine * */ _options = options; _productToUpdate = AutoUpdateProductDescriptor.FromAssembly(SnapInHostingEngine.Instance.StartingExecutable, SnapInHostingEngine.Instance.AppVersion); _downloaders = new AutoUpdateDownloaderList(); _downloaders.AddRange(this.CreateDownloadersForInternalUse()); if (_options.DownloadPath == null || _options.DownloadPath == string.Empty) _options.DownloadPath = this.GetBootstrapPath(); }
public AutoUpdateProductDescriptorEventArgs(AutoUpdateProductDescriptor productDescriptor) { _productDescriptor = productDescriptor; }