/// <exclude /> public List <PackageFragmentValidationResult> Install() { Verify.IsNotNull(_packageInstaller, "Pre installation did not validate"); Verify.IsNotNull(_validationResult, "Call validation first"); if (_validationResult.Count > 0) { throw new InvalidOperationException("Installation did not validate"); } Verify.IsNull(_installationResult, "Install may only be called once"); Log.LogInformation(LogTitle, "Installing package: {0}, Version: {1}, Id = {2}", _packageName, _packageVersion, _packageId); PackageFragmentValidationResult result = _packageInstaller.Install(_systemLockingType); _installationResult = new List <PackageFragmentValidationResult>(); if (result != null) { _installationResult.Add(result); } _installationResult.AddRange(FinalizeProcess(true)); return(_installationResult); }
/// <exclude /> public List <PackageFragmentValidationResult> Install() { Verify.IsNotNull(_packageInstaller, "Pre installation did not validate"); Verify.IsNotNull(_validationResult, "Call validation first"); if (_validationResult.Count > 0) { throw new InvalidOperationException("Installation did not validate"); } Verify.IsNull(_installationResult, "Install may only be called once"); var userName = UserValidationFacade.IsLoggedIn() ? UserValidationFacade.GetUsername() : "<system>"; Log.LogInformation(LogTitle, $"Installing package: {_packageName}, Version: {_packageVersion}, Id = {_packageId}; User name: '{userName}'"); PackageFragmentValidationResult result = _packageInstaller.Install(_systemLockingType); _installationResult = new List <PackageFragmentValidationResult>(); if (result != null) { _installationResult.Add(result); } _installationResult.AddRange(FinalizeProcess(true)); return(_installationResult); }
/// <exclude /> public List <PackageFragmentValidationResult> Uninstall() { Verify.IsNotNull(_packageUninstaller, "Pre un-installation did not validate"); if (_validationResult == null) { throw new InvalidOperationException("Call validation first"); } if (_validationResult.Count > 0) { throw new InvalidOperationException("Installation did not validate"); } if (_uninstallationResult != null) { throw new InvalidOperationException("Install may only be called onece"); } PackageFragmentValidationResult result = _packageUninstaller.Uninstall(_systemLockingType); _uninstallationResult = new List <PackageFragmentValidationResult>(); if (result != null) { _uninstallationResult.Add(result); } else { _uninstallationResult.AddRange(FinalizeProcess()); } return(_uninstallationResult); }
/// <exclude /> public static PackageInformation GetPackageInformationFromZipfile(string zipFilename) { XElement installContent; PackageFragmentValidationResult packageFragmentValidationResult = XmlHelper.LoadInstallXml(zipFilename, out installContent); if (packageFragmentValidationResult != null) { throw new InvalidOperationException(packageFragmentValidationResult.Message); } PackageInformation packageInformation; packageFragmentValidationResult = PackageManager.ValidatePackageInformation(installContent, out packageInformation); if (packageFragmentValidationResult != null) { throw new InvalidOperationException(packageFragmentValidationResult.Message); } return(packageInformation); }
private IEnumerable <PackageFragmentValidationResult> Initialize() { if (_isInitialized) { throw new InvalidOperationException("Initialize() may only be called once"); } _isInitialized = true; Exception exception = null; try { _packageInstallerContex = new PackageInstallerContext(new ZipFileSystem(this.ZipFilename), this.PackageInstallDirectory, this.TempDirectory, this.PackageInformation); } catch (Exception ex) { exception = ex; } if (exception != null) { return new [] { new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, exception) } } ; PackageAssemblyHandler.ClearAssemblyList(); XElement installElement; PackageFragmentValidationResult packageFragmentValidationResult = XmlHelper.LoadInstallXml(this.ZipFilename, out installElement); if (packageFragmentValidationResult != null) { return new [] { packageFragmentValidationResult } } ; XElement packageFragmentInstallerBinariesElement = installElement.Element(XmlUtils.GetXName(PackageSystemSettings.XmlNamespace, PackageSystemSettings.PackageFragmentInstallerBinariesElementName)); if (packageFragmentInstallerBinariesElement != null) { List <PackageFragmentValidationResult> result1 = LoadPackageFragmentInstallerBinaries(packageFragmentInstallerBinariesElement).ToList(); if (result1.Count > 0) { return(result1); } } XElement packageFragmentInstallersElement = installElement.Element(XmlUtils.GetXName(PackageSystemSettings.XmlNamespace, PackageSystemSettings.PackageFragmentInstallersElementName)); if (packageFragmentInstallersElement == null) { return new [] { new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, string.Format("The {0} file is wrongly formatted", PackageSystemSettings.InstallFilename)) } } ; var result2 = LoadPackageFragmentInstallers(packageFragmentInstallersElement); if (result2.Count > 0) { return(result2); } return(new PackageFragmentValidationResult[] { }); }
/// <exclude /> public static PackageManagerInstallProcess Install(Stream zipFileStream, bool isLocalInstall, string packageServerAddress) { if (!isLocalInstall && string.IsNullOrEmpty(packageServerAddress)) { throw new ArgumentException("Non local install needs a packageServerAddress"); } string zipFilename = null; try { PackageFragmentValidationResult packageFragmentValidationResult = SaveZipFile(zipFileStream, out zipFilename); if (packageFragmentValidationResult != null) { return(new PackageManagerInstallProcess(new List <PackageFragmentValidationResult> { packageFragmentValidationResult }, null)); } XElement installContent; packageFragmentValidationResult = XmlHelper.LoadInstallXml(zipFilename, out installContent); if (packageFragmentValidationResult != null) { return(new PackageManagerInstallProcess(new List <PackageFragmentValidationResult> { packageFragmentValidationResult }, zipFilename)); } PackageInformation packageInformation; packageFragmentValidationResult = ValidatePackageInformation(installContent, out packageInformation); if (packageFragmentValidationResult != null) { return(new PackageManagerInstallProcess(new List <PackageFragmentValidationResult> { packageFragmentValidationResult }, zipFilename)); } if (RuntimeInformation.ProductVersion < packageInformation.MinCompositeVersionSupported || RuntimeInformation.ProductVersion > packageInformation.MaxCompositeVersionSupported) { return(new PackageManagerInstallProcess(new List <PackageFragmentValidationResult> { new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, Texts.PackageManager_CompositeVersionMisMatch( RuntimeInformation.ProductVersion, packageInformation.MinCompositeVersionSupported, packageInformation.MaxCompositeVersionSupported)) }, zipFilename)); } bool updatingInstalledPackage = false; if (IsInstalled(packageInformation.Id)) { string currentVersionString = GetCurrentVersion(packageInformation.Id); Version currentVersion = new Version(currentVersionString); Version newVersion = new Version(packageInformation.Version); if (newVersion <= currentVersion) { string validationError = newVersion == currentVersion ? Texts.PackageManager_PackageAlreadyInstalled : Texts.PackageManager_NewerVersionInstalled; return(new PackageManagerInstallProcess( new List <PackageFragmentValidationResult> { new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, validationError) }, zipFilename)); } updatingInstalledPackage = true; } string originalInstallDirectory = null; string packageInstallDirectory = CreatePackageDirectoryName(packageInformation); if (updatingInstalledPackage) { originalInstallDirectory = packageInstallDirectory; packageInstallDirectory += "-" + packageInformation.Version; } C1Directory.CreateDirectory(packageInstallDirectory); string packageZipFilename = Path.Combine(packageInstallDirectory, Path.GetFileName(zipFilename)); C1File.Copy(zipFilename, packageZipFilename, true); string username = "******"; if (UserValidationFacade.IsLoggedIn()) { username = UserValidationFacade.GetUsername(); } var doc = new XDocument(); XElement packageInfoElement = new XElement(XmlUtils.GetXName(PackageSystemSettings.XmlNamespace, PackageSystemSettings.PackageInfoElementName)); doc.Add(packageInfoElement); packageInfoElement.Add( new XAttribute(PackageSystemSettings.PackageInfo_NameAttributeName, packageInformation.Name), new XAttribute(PackageSystemSettings.PackageInfo_GroupNameAttributeName, packageInformation.GroupName), new XAttribute(PackageSystemSettings.PackageInfo_VersionAttributeName, packageInformation.Version), new XAttribute(PackageSystemSettings.PackageInfo_AuthorAttributeName, packageInformation.Author), new XAttribute(PackageSystemSettings.PackageInfo_WebsiteAttributeName, packageInformation.Website), new XAttribute(PackageSystemSettings.PackageInfo_DescriptionAttributeName, packageInformation.Description), new XAttribute(PackageSystemSettings.PackageInfo_InstallDateAttributeName, DateTime.Now), new XAttribute(PackageSystemSettings.PackageInfo_InstalledByAttributeName, username), new XAttribute(PackageSystemSettings.PackageInfo_IsLocalInstalledAttributeName, isLocalInstall), new XAttribute(PackageSystemSettings.PackageInfo_CanBeUninstalledAttributeName, packageInformation.CanBeUninstalled), new XAttribute(PackageSystemSettings.PackageInfo_FlushOnCompletionAttributeName, packageInformation.FlushOnCompletion), new XAttribute(PackageSystemSettings.PackageInfo_ReloadConsoleOnCompletionAttributeName, packageInformation.ReloadConsoleOnCompletion), new XAttribute(PackageSystemSettings.PackageInfo_SystemLockingAttributeName, packageInformation.SystemLockingType.Serialize())); if (!string.IsNullOrEmpty(packageServerAddress)) { packageInfoElement.Add(new XAttribute(PackageSystemSettings.PackageInfo_PackageServerAddressAttributeName, packageServerAddress)); } string infoFilename = Path.Combine(packageInstallDirectory, PackageSystemSettings.PackageInformationFilename); doc.SaveToFile(infoFilename); var packageInstaller = new PackageInstaller(new PackageInstallerUninstallerFactory(), packageZipFilename, packageInstallDirectory, TempDirectoryFacade.CreateTempDirectory(), packageInformation); return(new PackageManagerInstallProcess( packageInstaller, packageInformation.SystemLockingType, zipFilename, packageInstallDirectory, packageInformation.Name, packageInformation.Version, packageInformation.Id, originalInstallDirectory)); } catch (Exception ex) { return(new PackageManagerInstallProcess(new List <PackageFragmentValidationResult> { new PackageFragmentValidationResult(PackageFragmentValidationResultType.Fatal, ex) }, zipFilename)); } }