/// <inheritdoc/>
 public void DownloadFile(string url, string filePath)
 {
     ExecuteWithRetries(() =>
     {
         _httpRequestExecutor.DownloadFile(url, filePath);
         return(true);
     });
 }
        private void DownloadDriverIfMissing(
            string version,
            string driverDestinationDirectoryPath,
            string driverDestinationFileName)
        {
            string driverDestinationFilePath = Path.Combine(driverDestinationDirectoryPath, driverDestinationFileName);

            if (!File.Exists(driverDestinationFilePath))
            {
                if (!Directory.Exists(driverDestinationDirectoryPath))
                {
                    Directory.CreateDirectory(driverDestinationDirectoryPath);
                }

                string downloadDestinationDirectoryPath = Path.Combine(driverDestinationDirectoryPath, "dl");

                if (!Directory.Exists(downloadDestinationDirectoryPath))
                {
                    Directory.CreateDirectory(downloadDestinationDirectoryPath);
                }

                Architecture architecture = ResolveArchitecture();

                string downloadUrl      = _setupStrategy.GetDriverDownloadUrl(version, architecture).AbsoluteUri;
                string downloadFileName = Path.GetFileName(downloadUrl);

                string downloadFilePath = Path.Combine(downloadDestinationDirectoryPath, downloadFileName);
                _httpRequestExecutor.DownloadFile(downloadUrl, downloadFilePath);

                try
                {
                    ExtractDownloadedFile(downloadFilePath, driverDestinationFilePath);
                    GrantFileExecutePermission(driverDestinationFilePath);
                }
                finally
                {
                    Directory.Delete(downloadDestinationDirectoryPath, true);
                }
            }
        }