Beispiel #1
0
        protected override async Task OnTimer()
        {
            try
            {
                //Skip if network not available
                if (!NetworkStatus.CanDownload(_downloadNetworkPriority))
                {
                    _logger?.LogInformation($"Skip package download due to network not allowed to download.");
                    return;
                }

                _logger?.LogDebug($"Running package updater. Downloading {this.PackageVersion}.");
                PackageVersionInfo packageVersion = await GetPackageVersionInformation();

                var     desiredVersion   = UpdateUtility.ParseVersion(packageVersion.Version);
                Version installedVersion = GetInstalledVersion();
                if (desiredVersion.CompareTo(installedVersion) != 0)
                {
                    _logger?.LogInformation($"The desired version of {desiredVersion} is different to installed version {installedVersion}.");
                    await DownloadAndInstallNewVersionAsync(packageVersion);
                }
            }
            catch (Exception ex)
            {
                _logger?.LogError($"Error download {this.PackageVersion}. Exception: {ex.ToMinimized()}");
            }
        }
        /// <summary>
        /// Download the new version of KinesisTap build using package Url and install it.
        /// </summary>
        /// <param name="packageVersion">an instance of <see cref="PackageVersionInfo"/> object.</param>
        public async Task DownloadAndInstallNewVersionAsync(PackageVersionInfo packageVersion)
        {
            //Upload the new version
            string packageUrl = packageVersion.PackageUrl.Replace("{Version}", packageVersion.Version);
            string extension  = Path.GetExtension(packageUrl).ToLower();

            if (!IsExtensionSuportedByPlatform(extension))
            {
                _logger.LogWarning($"Extension {extension} is not supported on {Utility.Platform}");
                return;
            }
            _logger?.LogInformation($"Downloading {packageVersion.Name} version {packageVersion.Version} from {packageUrl}...");

            IFileDownloader downloader = CreateDownloaderFromUrl(packageUrl, _context);

            string updateDirectory = "update";

            if (!Directory.Exists(updateDirectory))
            {
                Directory.CreateDirectory(updateDirectory);
            }
            string downloadPath = Path.Combine(updateDirectory, Path.GetFileName(packageUrl));

            if (File.Exists(downloadPath))
            {
                File.Delete(downloadPath);
            }
            await downloader.DownloadFileAsync(packageUrl, downloadPath);

            _logger?.LogInformation($"Package downloaded to {downloadPath}. Expanding package...");

            if (!_skipSignatureVerification)
            {
                if (EXT_MSI.Equals(extension, StringComparison.Ordinal))
                {
                    if (!await VerifyAuthenticodeSignatureAsync(_appDataFileProvider.GetFullPath(downloadPath)))
                    {
                        PublishCounter(UpdateMetricsConstants.PackageSignaturesInvalid, CounterTypeEnum.Increment, 1);
                        _logger.LogWarning("Cannot verify digital signature for package {0}", downloadPath);
                        return;
                    }

                    PublishCounter(UpdateMetricsConstants.PackageSignaturesValid, CounterTypeEnum.Increment, 1);
                }
            }
            else
            {
                _logger.LogInformation("Skipping digital signature verification");
            }

            if (EXT_NUPKG.Equals(extension))
            {
                await InstallNugetPackageAsync(downloadPath);
            }
            else
            {
                await InstallPackageAsync(downloadPath);
            }
        }
Beispiel #3
0
 /// <summary>
 /// Check for agent update. It will trigger agent update if the desired version is different than the current running version.
 /// </summary>
 internal async Task CheckAgentUpdates()
 {
     _logger?.LogDebug($"Running package updater. Downloading {this.PackageVersion}.");
     PackageVersionInfo packageVersion = await GetPackageVersionInformation();
     var desiredVersion = UpdateUtility.ParseVersion(packageVersion.Version);
     Version installedVersion = GetInstalledVersion();
     if (desiredVersion.CompareTo(installedVersion) != 0)
     {
         _logger?.LogInformation($"The desired version of {desiredVersion} is different to installed version {installedVersion}.");
         await this.packageInstaller.DownloadAndInstallNewVersionAsync(packageVersion);
     }
 }
Beispiel #4
0
        protected override async Task OnTimer()
        {
            try
            {
                _logger?.LogDebug($"Running package updater. Downloading {this.PackageVersion}.");
                PackageVersionInfo packageVersion = await GetPackageVersionInformation();

                var     desiredVersion   = UpdateUtility.ParseVersion(packageVersion.Version);
                Version installedVersion = GetInstalledVersion();
                if (desiredVersion.CompareTo(installedVersion) != 0)
                {
                    _logger?.LogInformation($"The desired version of {desiredVersion} is different to installed version {installedVersion}.");
                    await DownloadAndInstallNewVersionAsync(packageVersion);
                }
            }
            catch (Exception ex)
            {
                _logger?.LogError($"Error download {this.PackageVersion}. Exception: {ex.ToAsyncString()}");
            }
        }
Beispiel #5
0
        /// <summary>
        /// Download the new version of KinesisTap build using package Url and install it.
        /// </summary>
        /// <param name="packageVersion">an instance of <see cref="PackageVersionInfo"/> object.</param>
        public async Task DownloadAndInstallNewVersionAsync(PackageVersionInfo packageVersion)
        {
            //Upload the new version
            string packageUrl = packageVersion.PackageUrl.Replace("{Version}", packageVersion.Version);
            string extension  = Path.GetExtension(packageUrl).ToLower();

            if (!IsExtensionSuportedByPlatform(extension))
            {
                _logger.LogWarning($"Extension {extension} is not supported on {Utility.Platform}");
                return;
            }
            _logger?.LogInformation($"Downloading {packageVersion.Name} version {packageVersion.Version} from {packageUrl}...");

            IFileDownloader downloader = UpdateUtility.CreateDownloaderFromUrl(packageUrl, this._context);

            string updateDirectory = Path.Combine(Utility.GetKinesisTapProgramDataPath(), "update");

            if (!Directory.Exists(updateDirectory))
            {
                Directory.CreateDirectory(updateDirectory);
            }
            string downloadPath = Path.Combine(updateDirectory, Path.GetFileName(packageUrl));

            if (File.Exists(downloadPath))
            {
                File.Delete(downloadPath);
            }
            await downloader.DownloadFileAsync(packageUrl, downloadPath);

            _logger?.LogInformation($"Package downloaded to {downloadPath}. Expanding package...");

            if (EXT_NUPKG.Equals(extension))
            {
                await InstallNugetPackageAsync(downloadPath);
            }
            else
            {
                await InstallPackageAsync(downloadPath);
            }
        }
Beispiel #6
0
        private async Task DownloadAndInstallNewVersionAsync(PackageVersionInfo packageVersion)
        {
            //Upload the new version
            string packageUrl = packageVersion.PackageUrl.Replace("{Version}", packageVersion.Version);

            _logger?.LogInformation($"Downloading {packageVersion.Name} version {packageVersion.Version} from {packageUrl}...");
            IFileDownloader downloader      = UpdateUtility.CreateDownloaderFromUrl(packageUrl, this._context);
            string          updateDirectory = Path.Combine(Utility.GetKinesisTapProgramDataPath(), "update");

            if (!Directory.Exists(updateDirectory))
            {
                Directory.CreateDirectory(updateDirectory);
            }
            string downloadPath = Path.Combine(updateDirectory, $"KinesisTap.{packageVersion.Version}.nupkg");

            if (File.Exists(downloadPath))
            {
                File.Delete(downloadPath);
            }
            await downloader.DownloadFileAsync(packageUrl, downloadPath);

            _logger?.LogInformation($"Package downloaded to {downloadPath}. Expanding package...");

            //Expand the new version
            string expandDirectory = downloadPath.Substring(0, downloadPath.Length - 6); //less ".nupkg"

            if (Directory.Exists(expandDirectory))
            {
                Directory.Delete(expandDirectory, true);
            }
            ZipFile.ExtractToDirectory(downloadPath, expandDirectory);

            //Execute the ChocoInstall.ps1 out of process so that it can restart KinesisTap
            string installScriptPath = Path.Combine(expandDirectory, @"tools\chocolateyinstall.ps1");

            _logger?.LogInformation($"Executing installation script {installScriptPath}...");
            await ExecutePowershellOutOfProcessAsync(installScriptPath);
        }