示例#1
0
        public bool ExtractCabFiles()
        {
            if (!FdiIterate())
            {
                throw new Exception("Failed to iterate cab files");
            }

            foreach (var file in _fileNames)
            {
                Retry.Block(5, 1, () =>
                {
                    ExtractFile(file);
                });
            }
            return(true);
        }
        public async Task <List <UpdateChannel> > DownloadReleaseHistoryCabAsync()
        {
            var guid = Guid.NewGuid().ToString();

            var cabPath = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid);

            Directory.CreateDirectory(cabPath);

            var savePath           = Environment.ExpandEnvironmentVariables(@"%temp%\ReleaseHistory.xml");
            var releaseHistoryPath = "";

            var localCabPath = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid + @"\" + guid + ".cab");

            try
            {
                var now = DateTime.Now;

                var tmpReleaseHistory =
                    Environment.ExpandEnvironmentVariables(@"%temp%\" + now.Year + now.Month + now.Day + now.Hour +
                                                           "_ReleaseHistory.xml");
                using (var releaser = await myLock.LockAsync())
                {
                    if (File.Exists(localCabPath))
                    {
                        File.Delete(localCabPath);
                    }

                    if (!File.Exists(tmpReleaseHistory))
                    {
                        if (!File.Exists(localCabPath))
                        {
                            var fd = new FileDownloader();
                            await fd.DownloadAsync(OfficeVersionHistoryUrl, localCabPath);
                        }
                        var cabExtractor = new CabExtractor(localCabPath);
                        cabExtractor.ExtractCabFiles();
                    }

                    var dirInfo = new DirectoryInfo(Environment.ExpandEnvironmentVariables(@"%temp%"));
                    foreach (var file in dirInfo.GetFiles("*_ReleaseHistory.xml"))
                    {
                        try
                        {
                            if (!file.FullName.Equals(tmpReleaseHistory, StringComparison.InvariantCultureIgnoreCase))
                            {
                                File.Delete(file.FullName);
                            }
                        }
                        catch (Exception ex)
                        {
                        }
                    }

                    releaseHistoryPath =
                        Environment.ExpandEnvironmentVariables(@"%temp%\" + guid + @"\ExtractedFiles\ReleaseHistory.xml");
                    if (File.Exists(tmpReleaseHistory))
                    {
                        releaseHistoryPath = tmpReleaseHistory;
                    }
                    else
                    {
                        Retry.Block(10, 1, () => File.Copy(releaseHistoryPath, tmpReleaseHistory, true));
                    }
                }
            }
            catch (Exception ex)
            {
                releaseHistoryPath = savePath;
            }

            var releaseHistory = GenerateReleaseHistory(releaseHistoryPath);

            try
            {
                using (var releaser = await myLock.LockAsync())
                {
                    if (!string.IsNullOrEmpty(releaseHistoryPath))
                    {
                        if (File.Exists(releaseHistoryPath))
                        {
                            if (releaseHistoryPath != savePath)
                            {
                                File.Copy(releaseHistoryPath, savePath, true);
                            }
                        }
                    }
                    if (File.Exists(localCabPath))
                    {
                        File.Delete(localCabPath);
                    }
                    if (Directory.Exists(cabPath))
                    {
                        Directory.Delete(cabPath, true);
                    }
                }
            }
            catch { }

            return(releaseHistory);
        }
        public async Task <List <UpdateFiles> > DownloadCabAsync()
        {
            var guid = Guid.NewGuid().ToString();

            var cabPath = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid);

            Directory.CreateDirectory(cabPath);

            var localCabPath = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid + @"\" + guid + ".cab");

            if (File.Exists(localCabPath))
            {
                File.Delete(localCabPath);
            }

            var now = DateTime.Now;

            var tmpFile32 = Environment.ExpandEnvironmentVariables(@"%temp%\" + now.Year + now.Month + now.Day + now.Hour + "_32.xml");
            var tmpFile64 = Environment.ExpandEnvironmentVariables(@"%temp%\" + now.Year + now.Month + now.Day + now.Hour + "_64.xml");

            if (!File.Exists(tmpFile32) || !File.Exists(tmpFile64))
            {
                using (var releaser = await myLock.LockAsync())
                {
                    var tmpFile =
                        Environment.ExpandEnvironmentVariables(@"%temp%\" + now.Year + now.Month + now.Day + now.Hour +
                                                               ".cab");

                    if (File.Exists(tmpFile))
                    {
                        Retry.Block(10, 1, () => File.Copy(tmpFile, localCabPath, true));
                    }

                    if (!File.Exists(localCabPath))
                    {
                        var fd = new FileDownloader();
                        await fd.DownloadAsync(OfficeVersionUrl, localCabPath);

                        try
                        {
                            File.Copy(localCabPath, tmpFile);
                        }
                        catch
                        {
                        }
                    }

                    var cabExtractor = new CabExtractor(localCabPath);
                    cabExtractor.ExtractCabFiles();
                }
            }

            var xml32Path = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid + @"\ExtractedFiles\o365client_32bit.xml");
            var xml64Path = Environment.ExpandEnvironmentVariables(@"%temp%\" + guid + @"\ExtractedFiles\o365client_64bit.xml");

            if (File.Exists(tmpFile32))
            {
                xml32Path = tmpFile32;
            }
            else
            {
                Retry.Block(10, 1, () => File.Copy(xml32Path, tmpFile32, true));
            }

            if (File.Exists(tmpFile64))
            {
                xml64Path = tmpFile64;
            }
            else
            {
                Retry.Block(10, 1, () => File.Copy(xml64Path, tmpFile64, true));
            }

            var updateFiles32 = GenerateUpdateFiles(xml32Path);
            var updateFiles64 = GenerateUpdateFiles(xml64Path);

            try
            {
                if (File.Exists(localCabPath))
                {
                    File.Delete(localCabPath);
                }
                if (Directory.Exists(cabPath))
                {
                    Directory.Delete(cabPath, true);
                }
            }
            catch { }

            return(new List <UpdateFiles>()
            {
                updateFiles32,
                updateFiles64
            });
        }