Exemple #1
0
        public async Task <string> GetOfficeLatestVersion(string branch, OfficeEdition edition)
        {
            var ppDownload    = new ProPlusDownloader();
            var latestVersion = await ppDownload.GetLatestVersionAsync(branch, edition);

            return(latestVersion);
        }
        private async Task GetProPlusVersions()
        {
            await Retry.BlockAsync(3, 1, async() =>
            {
                var cd = new ProPlusDownloader();
                var channelVersionJson = await cd.GetChannelVersionJson();
                var branches           = GlobalObjects.ViewModel.JsonToBranches(channelVersionJson);
                if (branches != null)
                {
                    GlobalObjects.ViewModel.Branches = branches;
                }

                var ppDownload = new ProPlusDownloader();

                foreach (var channel in GlobalObjects.ViewModel.Branches)
                {
                    var latestVersion      = await ppDownload.GetLatestVersionAsync(channel.Branch.ToString(), OfficeEdition.Office32Bit);
                    channel.CurrentVersion = latestVersion;
                    if (channel.Versions.All(v => v.Version != latestVersion))
                    {
                        channel.Versions.Insert(0, new Build()
                        {
                            Version = latestVersion
                        });
                    }
                }
            });
        }
Exemple #3
0
        public async Task ChangeOfficeChannelWmi(RemoteMachine client, OfficeInstallation localInstall)
        {
            var    newChannel = client.Channel.ToString();
            string version    = null;

            if (client.Version != null)
            {
                version = client.Version.ToString();
            }

            await Task.Run(async() =>
            {
                var installOffice = new InstallOfficeWmi
                {
                    remoteUser          = client.UserName,
                    remoteComputerName  = client.Machine,
                    remoteDomain        = client.WorkGroup,
                    remotePass          = client.Password,
                    newChannel          = client.Channel.ToString(),
                    newVersion          = version,
                    connectionNamespace = "\\root\\cimv2"
                };

                try
                {
                    var ppDownloader = new ProPlusDownloader();
                    var baseUrl      = await ppDownloader.GetChannelBaseUrlAsync(newChannel, OfficeEdition.Office32Bit);
                    if (string.IsNullOrEmpty(baseUrl))
                    {
                        throw (new Exception(string.Format("Cannot find BaseUrl for Channel: {0}", newChannel)));
                    }

                    var channelToChangeTo = newChannel;

                    if (string.IsNullOrEmpty(channelToChangeTo))
                    {
                        throw (new Exception("Version required"));
                    }

                    await installOffice.ChangeOfficeChannel(channelToChangeTo, baseUrl);
                    var installGenerator = new OfficeInstallManager();
                }
                catch (Exception ex)
                {
                    LogWmiErrorMessage(ex, new RemoteComputer()
                    {
                        Name     = client.Machine,
                        Domain   = client.WorkGroup,
                        UserName = client.UserName,
                        Password = client.Password
                    });
                    throw (new Exception("Update Failed"));
                }
            });
        }
Exemple #4
0
        public async Task <UpdateFiles> GetOfficeInstallFileXml()
        {
            var ppDownload   = new ProPlusDownloader();
            var installFiles = await ppDownload.DownloadCabAsync();

            if (installFiles != null)
            {
                var installFile = installFiles.FirstOrDefault();
                if (installFile != null)
                {
                    return(installFile);
                }
            }
            return(null);
        }
Exemple #5
0
        public async Task TestProPlusGenerator()
        {
            var proPlusDownloader = new ProPlusDownloader();

            proPlusDownloader.DownloadFileProgress += (sender, progress) =>
            {
                var percent = progress.PercentageComplete;
                if (percent != null)
                {
                }
            };

            await proPlusDownloader.DownloadBranch(new DownloadBranchProperties()
            {
                BranchName      = "Current",
                OfficeEdition   = OfficeEdition.Office64Bit,
                TargetDirectory = @"e:\Office",
                Languages       = new List <string>()
                {
                    "en-us", "fr-fr"
                }
            });
        }
        private async Task GetBranchVersion(OfficeBranch branch, OfficeEdition officeEdition)
        {
            try
            {
                if (branch.Updated)
                {
                    return;
                }
                var ppDownload    = new ProPlusDownloader();
                var latestVersion = await ppDownload.GetLatestVersionAsync(branch.Branch.ToString(), officeEdition);

                var modelBranch = GlobalObjects.ViewModel.Branches.FirstOrDefault(b =>
                                                                                  b.Branch.ToString().ToLower() == branch.Branch.ToString().ToLower());
                if (modelBranch == null)
                {
                    return;
                }
                if (modelBranch.Versions.Any(v => v.Version == latestVersion))
                {
                    return;
                }
                modelBranch.Versions.Insert(0, new Build()
                {
                    Version = latestVersion
                });
                modelBranch.CurrentVersion = latestVersion;

                //ProductVersion.ItemsSource = modelBranch.Versions;
                //ProductVersion.SetValue(TextBoxHelper.WatermarkProperty, modelBranch.CurrentVersion);

                modelBranch.Updated = true;
            }
            catch (Exception)
            {
            }
        }
Exemple #7
0
 public OfficeInfoDownloader()
 {
     _proPlusDownloader = new ProPlusDownloader();
 }
Exemple #8
0
        public async Task TestProPlusDownloadVersionHistory()
        {
            var proPlusDownloader = new ProPlusDownloader();

            await proPlusDownloader.DownloadReleaseHistoryCabAsync();
        }
Exemple #9
0
 public VersionDownloader()
 {
     _proPlusDownloader = new ProPlusDownloader();
 }
        private async Task DownloadOfficeFiles()
        {
            try
            {
                SetTabStatus(false);
                GlobalObjects.ViewModel.BlockNavigation = true;
                _tokenSource = new CancellationTokenSource();

                UpdateXml();

                ProductUpdateSource.IsReadOnly = true;
                UpdatePath.IsEnabled           = false;

                DownloadProgressBar.Maximum = 100;
                DownloadPercent.Content     = "";

                var configXml = GlobalObjects.ViewModel.ConfigXmlParser.ConfigurationXml;
                var startPath = ProductUpdateSource.Text.Trim();

                if (!string.IsNullOrEmpty(startPath))
                {
                    GlobalObjects.ViewModel.DownloadFolderPath = startPath;
                }

                var channelItems = (List <Channel>)lvUsers.ItemsSource;

                var taskList = new List <Task>();
                _lastUpdated = DateTime.Now.AddDays(-10);
                var startTime = DateTime.Now;

                foreach (var channelItem in channelItems)
                {
                    if (!channelItem.Selected)
                    {
                        continue;
                    }
                    var branch = channelItem.ChannelName;

                    var task = Task.Run(async() =>
                    {
                        try
                        {
                            var proPlusDownloader = new ProPlusDownloader();
                            proPlusDownloader.DownloadFileProgress += (senderfp, progress) =>
                            {
                                if (!_tokenSource.Token.IsCancellationRequested)
                                {
                                    DownloadFileProgress(progress, channelItems, channelItem);
                                }
                            };

                            proPlusDownloader.VersionDetected += (sender, version) =>
                            {
                                UpdateVersion(channelItems, channelItem, version.Version);
                            };

                            if (string.IsNullOrEmpty(startPath))
                            {
                                return;
                            }

                            var languages =
                                (from product in configXml.Add.Products
                                 from language in product.Languages
                                 select language.ID.ToLower()).Distinct().ToList();

                            var officeEdition = GetSelectedEdition();

                            var buildPath = GlobalObjects.SetBranchFolderPath(branch, startPath);

                            Directory.CreateDirectory(buildPath);

                            var setVersion = channelItem.DisplayVersion;

                            await proPlusDownloader.DownloadBranch(new DownloadBranchProperties()
                            {
                                BranchName      = branch,
                                OfficeEdition   = officeEdition,
                                TargetDirectory = buildPath,
                                Languages       = languages,
                                Version         = setVersion
                            }, _tokenSource.Token);

                            if (!_tokenSource.Token.IsCancellationRequested)
                            {
                                UpdatePercentage(channelItems, channelItem.Name);
                            }

                            LogAnaylytics("/ProductView", "Download." + branch);
                        }
                        catch (Exception ex)
                        {
                            if (!ex.Message.ToLower().Contains("aborted"))
                            {
                                ex.LogException(false);
                                UpdateError(channelItems, channelItem.Name, "ERROR: " + ex.Message);
                            }
                        }
                    });

                    if (!GlobalObjects.ViewModel.AllowMultipleDownloads)
                    {
                        await task;
                    }

                    if (_tokenSource.Token.IsCancellationRequested)
                    {
                        break;
                    }

                    var timeTaken = DateTime.Now - startTime;

                    taskList.Add(task);
                    await Task.Delay(new TimeSpan(0, 0, 5));
                }

                await Task.Delay(new TimeSpan(0, 0, 1));

                foreach (var task in taskList)
                {
                    if (task.Exception != null)
                    {
                    }
                    await task;
                }

                //MessageBox.Show("Download Complete");
            }
            finally
            {
                SetTabStatus(true);
                GlobalObjects.ViewModel.BlockNavigation = false;
                ProductUpdateSource.IsReadOnly          = false;
                UpdatePath.IsEnabled      = true;
                DownloadProgressBar.Value = 0;
                DownloadPercent.Content   = "";

                DownloadButton.Content = "Download";
                _tokenSource           = new CancellationTokenSource();
            }
        }
        private async Task GenerateInstall(bool sign)
        {
            await Task.Run(async() =>
            {
                try
                {
                    var remoteLogPath = "";
                    if (GlobalObjects.ViewModel.RemoteLoggingPath != null &&
                        !string.IsNullOrEmpty(GlobalObjects.ViewModel.RemoteLoggingPath))
                    {
                        remoteLogPath = GlobalObjects.ViewModel.RemoteLoggingPath;
                    }
                    FixFileExtension();
                    var executablePath = "";

                    for (var i = 1; i <= 2; i++)
                    {
                        await Dispatcher.InvokeAsync(() =>
                        {
                            executablePath           = FileSavePath.Text.Trim();
                            WaitImage.Visibility     = Visibility.Visible;
                            GenerateButton.IsEnabled = false;
                            PreviousButton.IsEnabled = false;
                            GenerateButton.Content   = "";
                            PreviousButton.Content   = "";

                            if (string.IsNullOrEmpty(executablePath))
                            {
                                if (i == 1)
                                {
                                    GetSaveFilePath();
                                }
                            }
                        });

                        if (!string.IsNullOrEmpty(executablePath))
                        {
                            if (executablePath.ToLower().EndsWith(".exe") || executablePath.ToLower().EndsWith(".msi"))
                            {
                                break;
                            }
                            else
                            {
                                await Dispatcher.InvokeAsync(GetSaveFilePath);
                            }
                        }
                    }

                    if (string.IsNullOrEmpty(executablePath))
                    {
                        //throw (new Exception("File Path Required"));
                        return;
                    }

                    var directoryPath = System.IO.Path.GetDirectoryName(executablePath);
                    if (directoryPath != null)
                    {
                        if (!Directory.Exists(directoryPath))
                        {
                            var result = MessageBox.Show("The directory '" + directoryPath + "' does not exist." + Environment.NewLine + Environment.NewLine + "Create Directory?", "Create Directory", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes);
                            Directory.CreateDirectory(directoryPath);

                            await Dispatcher.InvokeAsync(() => { OpenExeFolderButton.IsEnabled = true; });
                        }
                    }

                    var configFilePath = Environment.ExpandEnvironmentVariables(@"%temp%\OfficeProPlus\" + Guid.NewGuid().ToString() + ".xml");
                    Directory.CreateDirectory(Environment.ExpandEnvironmentVariables(@"%temp%\OfficeProPlus"));

                    GlobalObjects.ViewModel.ConfigXmlParser.ConfigurationXml.Logging = new ODTLogging
                    {
                        Level = LoggingLevel.Standard, Path = @"%temp%"
                    };

                    System.IO.File.WriteAllText(configFilePath, GlobalObjects.ViewModel.ConfigXmlParser.Xml);

                    string sourceFilePath = null;
                    await Dispatcher.InvokeAsync(() =>
                    {
                        if (IncludeBuild.IsChecked.HasValue && IncludeBuild.IsChecked.Value)
                        {
                            sourceFilePath = BuildFilePath.Text.Trim();
                            if (string.IsNullOrEmpty(sourceFilePath))
                            {
                                sourceFilePath = null;
                            }
                        }
                    });

                    var isInstallExe = false;
                    await Dispatcher.InvokeAsync(() => { isInstallExe = InstallExecutable.IsChecked.HasValue && InstallExecutable.IsChecked.Value; });

                    var configXml  = GlobalObjects.ViewModel.ConfigXmlParser.ConfigurationXml;
                    string version = null;
                    if (configXml.Add.Version != null)
                    {
                        version = configXml.Add.Version.ToString();
                    }


                    if (!string.IsNullOrEmpty(sourceFilePath))
                    {
                        var branchName = "";
                        if (configXml.Add?.Branch != null)
                        {
                            branchName = configXml.Add.Branch.ToString();
                        }
                        if (configXml.Add?.ODTChannel != null)
                        {
                            branchName = configXml.Add.ODTChannel.ToString();
                        }

                        var languages = new List <string>();
                        foreach (var product in configXml.Add.Products)
                        {
                            foreach (var languageItem in product.Languages)
                            {
                                languages.Add(languageItem.ID);
                            }
                        }

                        var edition = OfficeEdition.Office32Bit;
                        if (configXml.Add.OfficeClientEdition == OfficeClientEdition.Office64Bit)
                        {
                            edition = OfficeEdition.Office64Bit;
                        }

                        var ppDownload = new ProPlusDownloader();
                        var validFiles = await ppDownload.ValidateSourceFiles(new DownloadBranchProperties()
                        {
                            TargetDirectory = sourceFilePath,
                            BranchName      = branchName,
                            Languages       = languages,
                            OfficeEdition   = edition,
                            Version         = version
                        });

                        var cabFilePath = sourceFilePath + @"\Office\Data\v32.cab";
                        if (configXml.Add.OfficeClientEdition == OfficeClientEdition.Office64Bit)
                        {
                            cabFilePath = sourceFilePath + @"\Office\Data\v64.cab";
                        }

                        if (string.IsNullOrEmpty(version) && System.IO.File.Exists(cabFilePath))
                        {
                            var fInfo        = new FileInfo(cabFilePath);
                            var cabExtractor = new CabExtractor(cabFilePath);
                            cabExtractor.ExtractCabFiles();
                            cabExtractor.Dispose();

                            var vdPathDir = fInfo.Directory?.FullName + @"\ExtractedFiles";
                            var vdPath    = vdPathDir + @"\VersionDescriptor.xml";
                            if (System.IO.File.Exists(vdPath))
                            {
                                var latestVersion = ppDownload.GetCabVersion(vdPath);
                                if (latestVersion != null)
                                {
                                    version = latestVersion;
                                }
                                if (Directory.Exists(vdPathDir))
                                {
                                    try
                                    {
                                        Directory.Delete(vdPathDir);
                                    }
                                    catch (Exception ex)
                                    {
                                        var strError = ex.Message;
                                    }
                                }
                            }
                        }

                        if (!validFiles)
                        {
                            throw (new Exception(
                                       "The Office Source Files are invalid. Please verify that all of the files have been downloaded."));
                        }
                    }

                    var productName = "Microsoft Office 365 ProPlus Installer";
                    var productId   = Guid.NewGuid().ToString(); //"8AA11E8A-A882-45CC-B52C-80149B4CF47A";
                    var upgradeCode = "AC89246F-38A8-4C32-9110-FF73533F417C";

                    var productVersion = new Version("1.0.0");

                    await Dispatcher.InvokeAsync(() =>
                    {
                        if (MajorVersion.Value.HasValue && MinorVersion.Value.HasValue && ReleaseVersion.Value.HasValue)
                        {
                            productVersion =
                                new Version(MajorVersion.Value.Value + "." + MinorVersion.Value.Value + "." +
                                            ReleaseVersion.Value.Value);
                        }
                    });

                    var installProperties = new List <OfficeInstallProperties>();

                    if (GlobalObjects.ViewModel.ApplicationMode == ApplicationMode.LanguagePack)
                    {
                        productName = "Microsoft Office 365 ProPlus Language Pack";

                        var languages = configXml?.Add?.Products?.FirstOrDefault()?.Languages;
                        foreach (var language in languages)
                        {
                            var configLangXml = new ConfigXmlParser(GlobalObjects.ViewModel.ConfigXmlParser.Xml);
                            configLangXml.ConfigurationXml.Add.ODTChannel = null;
                            var tmpProducts = configLangXml?.ConfigurationXml?.Add?.Products;
                            tmpProducts.FirstOrDefault().Languages = new List <ODTLanguage>()
                            {
                                new ODTLanguage()
                                {
                                    ID = language.ID
                                }
                            };

                            var tmpXmlFilePath = Environment.ExpandEnvironmentVariables(@"%temp%\" + Guid.NewGuid().ToString() + ".xml");
                            System.IO.File.WriteAllText(tmpXmlFilePath, configLangXml.Xml);

                            var tmpSourceFilePath = executablePath;

                            if (Regex.Match(executablePath, ".msi$", RegexOptions.IgnoreCase).Success)
                            {
                                tmpSourceFilePath = Regex.Replace(executablePath, ".msi$", "(" + language.ID + ").msi",
                                                                  RegexOptions.IgnoreCase);
                            }

                            if (Regex.Match(executablePath, ".exe", RegexOptions.IgnoreCase).Success)
                            {
                                tmpSourceFilePath = Regex.Replace(executablePath, ".exe$", "(" + language.ID + ").exe",
                                                                  RegexOptions.IgnoreCase);
                            }

                            var programFilesPath = @"%ProgramFiles%\Microsoft Office 365 ProPlus Installer\" + language.ID + @"\" + productVersion;

                            var langProductName = productName + " (" + language.ID + ")";

                            installProperties.Add(new OfficeInstallProperties()
                            {
                                ProductName          = langProductName,
                                ProductId            = langProductName.GenerateGuid(),
                                ConfigurationXmlPath = tmpXmlFilePath,
                                OfficeVersion        = OfficeVersion.Office2016,
                                ExecutablePath       = tmpSourceFilePath,
                                SourceFilePath       = sourceFilePath,
                                BuildVersion         = version,
                                UpgradeCode          = language.ID.GenerateGuid(),
                                Version             = productVersion,
                                Language            = "en-us",
                                ProgramFilesPath    = programFilesPath,
                                OfficeClientEdition = configXml.Add.OfficeClientEdition
                            });
                        }
                    }
                    else
                    {
                        installProperties.Add(new OfficeInstallProperties()
                        {
                            ProductName          = productName,
                            ProductId            = productId,
                            ConfigurationXmlPath = configFilePath,
                            OfficeVersion        = OfficeVersion.Office2016,
                            ExecutablePath       = executablePath,
                            SourceFilePath       = sourceFilePath,
                            BuildVersion         = version,
                            UpgradeCode          = upgradeCode,
                            Version             = productVersion,
                            Language            = "en-us",
                            ProgramFilesPath    = @"%ProgramFiles%\Microsoft Office 365 ProPlus Installer",
                            OfficeClientEdition = configXml.Add.OfficeClientEdition
                        });
                    }

                    foreach (var installProperty in installProperties)
                    {
                        IOfficeInstallGenerator installer = null;
                        if (isInstallExe)
                        {
                            installer = new OfficeInstallExecutableGenerator();
                            LogAnaylytics("/GenerateView", "GenerateExe");
                        }
                        else
                        {
                            installer = new OfficeInstallMsiGenerator();
                            LogAnaylytics("/GenerateView", "GenerateMSI");
                        }
                        installer.Generate(installProperty, remoteLogPath);
                    }


                    await Task.Delay(500);

                    if (!string.IsNullOrEmpty(GlobalObjects.ViewModel.SelectedCertificate.ThumbPrint) && sign)
                    {
                        await InstallerSign(executablePath);
                    }

                    if (InfoMessage != null)
                    {
                        if (isInstallExe)
                        {
                            InfoMessage(this, new MessageEventArgs()
                            {
                                Title = "Generate Executable", Message = "File Generation Complete"
                            });
                        }
                        else
                        {
                            InfoMessage(this, new MessageEventArgs()
                            {
                                Title = "Generate MSI", Message = "File Generation Complete"
                            });
                        }
                    }

                    await Task.Delay(500);
                }
                catch (Exception ex)
                {
                    LogErrorMessage(ex);
                    Console.WriteLine(ex.StackTrace);
                }
                finally
                {
                    Dispatcher.Invoke(() =>
                    {
                        WaitImage.Visibility     = Visibility.Hidden;
                        GenerateButton.IsEnabled = true;
                        PreviousButton.IsEnabled = true;

                        GenerateButton.Content = "Generate";
                        PreviousButton.Content = "Previous";
                    });
                }
            });
        }
        public async Task <string> GenerateConfigXml()
        {
            var currentDirectory = Directory.GetCurrentDirectory() + @"\Scripts";

            if (!System.IO.File.Exists(currentDirectory + @"\Generate-ODTConfigurationXML.ps1"))
            {
                currentDirectory = Directory.GetCurrentDirectory() + @"\Project\Scripts";
            }

            var xmlFilePath = Environment.ExpandEnvironmentVariables(@"%temp%\localConfig.xml");

            if (System.IO.File.Exists(xmlFilePath))
            {
                System.IO.File.Delete(xmlFilePath);
            }

            var scriptPath    = currentDirectory + @"\Generate-ODTConfigurationXML.ps1";
            var scriptPathTmp = currentDirectory + @"\Tmp-Generate-ODTConfigurationXML.ps1";

            if (!System.IO.File.Exists(scriptPathTmp))
            {
                System.IO.File.Copy(scriptPath, scriptPathTmp, true);
            }

            var scriptUrl = AppSettings.GenerateScriptUrl;

            try
            {
                await Retry.BlockAsync(5, 1, async() =>
                {
                    using (var webClient = new WebClient())
                    {
                        await webClient.DownloadFileTaskAsync(new Uri(scriptUrl), scriptPath);
                    }
                });
            }
            catch (Exception ex) { }

            var n = 1;
            await Retry.BlockAsync(2, 1, async() =>
            {
                var arguments = @"/c Powershell -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle " +
                                @"Hidden -File .\RunGenerateXML.ps1";

                if (n == 2)
                {
                    System.IO.File.Copy(scriptPathTmp, scriptPath, true);
                }

                var p = new Process
                {
                    StartInfo = new ProcessStartInfo()
                    {
                        FileName               = "cmd",
                        Arguments              = arguments,
                        CreateNoWindow         = true,
                        UseShellExecute        = false,
                        WorkingDirectory       = currentDirectory,
                        RedirectStandardOutput = true,
                        RedirectStandardError  = true
                    },
                };

                p.Start();
                p.WaitForExit();

                var error = await p.StandardError.ReadToEndAsync();
                if (!string.IsNullOrEmpty(error))
                {
                    throw (new Exception(error));
                }
                n++;
            });

            await Task.Delay(100);

            var configXml = "";

            if (System.IO.File.Exists(xmlFilePath))
            {
                configXml = System.IO.File.ReadAllText(xmlFilePath);
            }

            try
            {
                var installOffice = new InstallOffice();
                var updateUrl     = installOffice.GetBaseCdnUrl();
                if (!string.IsNullOrEmpty(updateUrl))
                {
                    var pd          = new ProPlusDownloader();
                    var channelName = await pd.GetChannelNameFromUrlAsync(updateUrl, OfficeEdition.Office32Bit);

                    if (!string.IsNullOrEmpty(configXml) && !string.IsNullOrEmpty(channelName))
                    {
                        configXml = installOffice.SetUpdateChannel(configXml, channelName);
                    }
                }
            } catch { }

            return(configXml);
        }
Exemple #13
0
 private async Task RunProgram()
 {
     var p = new ProPlusDownloader();
     await p.DownloadVersionsFromWebSite();
 }