예제 #1
0
        protected override bool ExecuteCore(PackageItem item)
        {
            var activePackageManager = GetActivePackageManager();

            Debug.Assert(activePackageManager != null);

            var walker = new InstallWalker(
                ProjectManager.LocalRepository,
                activePackageManager.SourceRepository,
                this,
                ignoreDependencies: false);

            IList <PackageOperation> operations = walker.ResolveOperations(item.PackageIdentity).ToList();

            IList <IPackage> scriptPackages = (from o in operations
                                               where o.Package.HasPowerShellScript()
                                               select o.Package).ToList();

            if (scriptPackages.Count > 0)
            {
                if (!RegistryHelper.CheckIfPowerShell2Installed())
                {
                    throw new InvalidOperationException(Resources.Dialog_PackageHasPSScript);
                }
            }

            IEnumerable <IPackage> licensePackages = from o in operations
                                                     where o.Action == PackageAction.Install && o.Package.RequireLicenseAcceptance && !activePackageManager.LocalRepository.Exists(o.Package)
                                                     select o.Package;

            // display license window if necessary
            if (licensePackages.Any())
            {
                // hide the progress window if we are going to show license window
                HideProgressWindow();

                bool accepted = _licenseWindowOpener.ShowLicenseWindow(licensePackages);
                if (!accepted)
                {
                    return(false);
                }

                ShowProgressWindow();
            }

            try {
                RegisterPackageOperationEvents(activePackageManager);
                ExecuteCommand(item, activePackageManager, operations);
            }
            finally {
                UnregisterPackageOperationEvents(activePackageManager);
            }

            return(true);
        }