コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
ファイル: PackageInstaller.cs プロジェクト: jim116801/C1-CMS
        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[] { });
        }
コード例 #6
0
        /// <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));
            }
        }