private static LatestVersionInformation getLatestVersionInformationFromServer(ServiceManager serviceManager)
        {
            LatestVersionInformation info = serviceManager.GetLatestVersionInfo();

            if (info == null || String.IsNullOrWhiteSpace(info.VersionNumber))
            {
                return(null);
            }

            try
            {
                System.Version currentVersion = new System.Version(Application.ProductVersion);
                System.Version latestVersion  = new System.Version(info.VersionNumber);
                if (currentVersion >= latestVersion)
                {
                    return(null);
                }

                if (NewVersionInformation != null)
                {
                    System.Version cachedLatestVersion = new System.Version(NewVersionInformation.VersionNumber);
                    if (cachedLatestVersion >= latestVersion)
                    {
                        return(null);
                    }
                }
            }
            catch (ArgumentException ex)
            {
                ExceptionHandlers.Handle("Wrong version number", ex);
                return(null);
            }

            return(info);
        }
        private static void copyNewVersionFromServer(LatestVersionInformation info)
        {
            if (info == null)
            {
                return;
            }

            string filename     = Path.GetFileName(info.InstallerFilePath);
            string tempFolder   = Environment.GetEnvironmentVariable("TEMP");
            string destFilePath = Path.Combine(tempFolder, filename);

            Debug.Assert(!System.IO.File.Exists(destFilePath));

            Trace.TraceInformation(String.Format(
                                       "[StaticUpdateChecker] Copying from \"{0}\" to \"{1}\"...", info.InstallerFilePath, destFilePath));
            try
            {
                System.IO.File.Copy(info.InstallerFilePath, destFilePath);
            }
            catch (Exception ex) // Any exception from System.IO.File.Copy()
            {
                ExceptionHandlers.Handle("Cannot download a new version", ex);
                return;
            }

            Trace.TraceInformation("[StaticUpdateChecker] File copied");
            onNewVersionCopiedFromServer(destFilePath, info.VersionNumber);
        }
        async private static Task checkForApplicationUpdatesAsync(ServiceManager serviceManager)
        {
            Trace.TraceInformation("[StaticUpdateChecker] Checking ServiceManager for the latest version information...");
            LatestVersionInformation info = getLatestVersionInformationFromServer(serviceManager);

            if (info == null)
            {
                return;
            }

            Trace.TraceInformation(String.Format("[StaticUpdateChecker] New version {0} is found", info.VersionNumber));
            if (String.IsNullOrEmpty(info.InstallerFilePath) || !System.IO.File.Exists(info.InstallerFilePath))
            {
                Trace.TraceWarning(String.Format("[StaticUpdateChecker] Installer cannot be found at \"{0}\"",
                                                 info.InstallerFilePath));
                return;
            }

            await Task.Run(() => copyNewVersionFromServer(info));
        }