private IEnumerable <PackageFragmentValidationResult> LoadPackageFragmentInstallerBinaries() { string binariesDirectory = Path.Combine(this.PackageInstallationDirectory, PackageSystemSettings.BinariesDirectoryName); if (!C1Directory.Exists(binariesDirectory)) { yield break; } foreach (string filename in C1Directory.GetFiles(binariesDirectory)) { string newFilename = Path.Combine(this.TempDirectory, Path.GetFileName(filename)); C1File.Copy(filename, newFilename); Log.LogVerbose("PackageUninstaller", "Loading package uninstaller fragment assembly '{0}'", newFilename); Exception exception = null; try { PackageAssemblyHandler.AddAssembly(newFilename); } catch (Exception ex) { exception = ex; } if (exception != null) { yield return(new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, exception)); } } }
private IEnumerable <PackageFragmentValidationResult> LoadPackageFragmentInstallerBinaries(XElement packageFragmentInstallerBinariesElement) { var binaryElements = packageFragmentInstallerBinariesElement.Elements(XmlUtils.GetXName(PackageSystemSettings.XmlNamespace, PackageSystemSettings.PackageFragmentInstallerBinariesAddElementName)).ToList(); if (!binaryElements.Any()) { return(new PackageFragmentValidationResult[0]); } string binariesDirectory = Path.Combine(this.PackageInstallDirectory, PackageSystemSettings.BinariesDirectoryName); if (!C1Directory.Exists(binariesDirectory)) { C1Directory.CreateDirectory(binariesDirectory); } var result = new List <PackageFragmentValidationResult>(); foreach (XElement element in binaryElements) { XAttribute pathAttribute = element.Attribute(PackageSystemSettings.PathAttributeName); string sourceFilename = pathAttribute.Value; string targetFilename = Path.Combine(binariesDirectory, Path.GetFileName(sourceFilename)); ZipFileSystem zipFileSystem = new ZipFileSystem(this.ZipFilename); if (!zipFileSystem.ContainsFile(sourceFilename)) { result.AddFatal($"The file '{sourceFilename}' is missing from the zip file"); continue; } // Extracting dll to package temp folder if (C1File.Exists(targetFilename)) { bool success = false; try { FileUtils.Delete(targetFilename); success = true; } catch (UnauthorizedAccessException) {} if (!success) { result.AddFatal($"Access denied to file '{targetFilename}'"); continue; } } zipFileSystem.WriteFileToDisk(sourceFilename, targetFilename); string newTargetFilename = Path.Combine(this.TempDirectory, Path.GetFileName(targetFilename)); C1File.Copy(targetFilename, newTargetFilename); Log.LogVerbose("PackageInstaller", "Loading package uninstaller fragment assembly '{0}'", newTargetFilename); PackageAssemblyHandler.AddAssembly(newTargetFilename); } return(result); }