Ejemplo n.º 1
0
        public bool Install(string extensionPath, bool?allUsers = default)
        {
            var installableExtension = extensionManager.CreateInstallableExtension(extensionPath);

            if (extensionManager.TryGetInstalledExtension(installableExtension.Header.Identifier, out var installedExtension))
            {
                if (IsUpToDate(installableExtension, installedExtension))
                {
                    Console.WriteLine($"Extension {NameVer(installedExtension)} is up to date.");
                    if (installedExtension.State != EnabledState.Enabled)
                    {
                        extensionManager.Enable(installedExtension);
                    }
                    return(false);
                }

                Uninstall(installableExtension.Header.Identifier, skipGlobal: GetIsExperimentalProperty(installableExtension.Header) != null);
            }

            if (extensionManager.TryGetInstalledExtension(installableExtension.Header.Identifier, out var globalExtension) && globalExtension.InstalledPerMachine)
            {
                if (installableExtension.Header.Version <= globalExtension.Header.Version)
                {
                    throw new Exception($"Extension '{NameVer(installableExtension)}' version must be higher than the globally installed extension '{NameVer(globalExtension)}'.");
                }

                SetIsExperimental(installableExtension.Header, true);
            }

            if (allUsers.HasValue)
            {
                SetAllUsers(installableExtension.Header, allUsers.Value);
            }

            Console.WriteLine($"Installing {NameVer(installableExtension)}");
            extensionManager.Install(installableExtension, installableExtension.Header.AllUsers);
            ExtensionManagerUtil.EnableLoadingExtensionsFromLocalAppData(externalSettingsManager);
            ExtensionManagerUtil.RemovePendingExtensionDeletion(externalSettingsManager, installableExtension.Header);
            ExtensionManagerService.UpdateLastExtensionsChange();
            var newlyInstalledExtension = extensionManager.GetInstalledExtension(installableExtension.Header.Identifier);

            extensionManager.Enable(newlyInstalledExtension);
            File.SetLastWriteTime(GetManifestPath(newlyInstalledExtension), DateTime.Now);
            if (!IsUpToDate(installableExtension, newlyInstalledExtension))
            {
                throw new Exception($"Failed installing extension '{NameVer(installableExtension)}'.");
            }
            return(true);
        }
Ejemplo n.º 2
0
        public bool InstallExtension(string extensionPath)
        {
            var installableExtension = extensionManager.CreateInstallableExtension(extensionPath);
            var packageWriteDateTime = File.GetLastWriteTime(installableExtension.PackagePath);
            var installedExtension   = default(IInstalledExtension);

            if (extensionManager.IsInstalled(installableExtension))
            {
                installedExtension = extensionManager.GetInstalledExtension(installableExtension.Header.Identifier);
                var installedOn = File.GetLastWriteTime(GetManifestPath(installedExtension)); // installedExtension.InstalledOn throws

                if (installableExtension.Header.Version == installedExtension.Header.Version && packageWriteDateTime < installedOn)
                {
                    Console.WriteLine($"Extension {NameVer(installedExtension)} is up to date.");
                    extensionManager.Enable(installedExtension);
                    return(false);
                }

                Console.WriteLine($"Uninstalling {NameVer(installedExtension)}");
                extensionManager.Uninstall(installedExtension);
            }

            if (installableExtension.Header.AllUsers)
            {
                var header = installableExtension.Header;
                header.GetType().GetProperty(nameof(header.AllUsers)).SetValue(header, false);
            }

            Console.WriteLine($"Installing {NameVer(installableExtension)}");
            extensionManager.Install(installableExtension, false);

            var newlyInstalledExtension = extensionManager.GetInstalledExtension(installableExtension.Header.Identifier);

            extensionManager.Enable(newlyInstalledExtension);
            File.SetLastWriteTime(GetManifestPath(newlyInstalledExtension), DateTime.Now);

            if (installedExtension != null && !PathUtil.ArePathEqual(installedExtension.InstallPath, newlyInstalledExtension.InstallPath))
            {
                Console.WriteLine($"Removing {installedExtension.InstallPath}");

                if (!DirectoryUtil.TryDeleteHard(installedExtension.InstallPath, recursive: true))
                {
                    Console.WriteLine($"The directory {installedExtension.InstallPath} could not be deleted completely. If you do not delete it manually, it will waste disk space.");
                }
            }

            return(true);
        }
Ejemplo n.º 3
0
        private void RunInstall(string extensionPath)
        {
            try
            {
                Console.Write("{0} Install ... ", _version);
                var installableExtension = _extensionManager.CreateInstallableExtension(extensionPath);
                var identifier           = installableExtension.Header.Identifier;
                UninstallSilent(identifier);

                var perMachine = false;
                var header     = installableExtension.Header;
                if (header.AllUsers != perMachine)
                {
                    if (SetAllUsers(header, perMachine))
                    {
                        Console.Write(string.Format("NOTE: Changing `AllUsers` to {0} ... ", perMachine));
                    }
                    else
                    {
                        Console.Write(string.Format("WARNING: Couldn't change `AllUsers` to {0} ... ", perMachine));
                    }
                }

                _extensionManager.Install(installableExtension, perMachine);

                var installedExtension = _extensionManager.GetInstalledExtension(identifier);
                _extensionManager.Enable(installedExtension);
                Console.WriteLine("Succeeded");
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR: {0}", ex.Message);
            }
        }
Ejemplo n.º 4
0
        public static RestartReason CheckForUpdates(string identifier, string updateUrl)
        {
            // Don't check for updates on non-DEPLOY builds; the URLs don't work and it seems
            // undesirable anyway.
#if DEPLOY
            IVsExtensionManager extensionManager   = Package.GetGlobalService(typeof(SVsExtensionManager)) as IVsExtensionManager;
            IInstalledExtension installedExtension = extensionManager.GetInstalledExtension(identifier);
            if (installedExtension == null)
            {
                throw new Exception(String.Format("Unable to find extension: {0}", identifier));
            }

            RepositoryEntry entry = new RepositoryEntry();
            entry.DownloadUrl = updateUrl;

            IVsExtensionRepository repository      = Package.GetGlobalService(typeof(SVsExtensionRepository)) as IVsExtensionRepository;
            IInstallableExtension  latestExtension = repository.Download(entry);

            if (latestExtension.Header.Version > installedExtension.Header.Version)
            {
                RestartReason reason = RestartReason.None;
                reason |= extensionManager.Disable(installedExtension);
                extensionManager.Uninstall(installedExtension);

                try {
                    reason |= extensionManager.Install(latestExtension, /*perMachine*/ false);

                    // Enable the new one.
                    IInstalledExtension latestInstalledExtension = extensionManager.GetInstalledExtension(latestExtension.Header.Identifier);
                    reason |= extensionManager.Enable(latestInstalledExtension);
                    return(reason);
                } catch {
                    // Revert the uninstallation.
                    extensionManager.RevertUninstall(installedExtension);
                    extensionManager.Enable(installedExtension);
                    throw;
                }
            }
#endif
            return(RestartReason.None);
        }
Ejemplo n.º 5
0
        public void Install(IVsExtensionManager manager, IInstalledExtension currentExtention, IInstallableExtension updatedExtension)
        {
            manager.Disable(currentExtention);
            manager.Uninstall(currentExtention);
            manager.Install(updatedExtension, false);

            var newlyInstalledVersion = manager.GetInstalledExtension(updatedExtension.Header.Identifier);
            if (newlyInstalledVersion.IsNotNull())
            {
                manager.Enable(newlyInstalledVersion);
            }
        }
    private RestartReason Install(IInstalledExtension currentExtension, IInstallableExtension updatedExtension)
    {
        //Uninstall old extension
        _extensionManager.Disable(currentExtension);
        _extensionManager.Uninstall(currentExtension);
        //Install new version
        var restartReason = _extensionManager.Install(updatedExtension, false);
        //Enable the newly installed version of the extension
        var newlyInstalledVersion = _extensionManager.GetInstalledExtension(updatedExtension.Header.Identifier);

        if (newlyInstalledVersion != null)
        {
            _extensionManager.Enable(newlyInstalledVersion);
        }
        return(restartReason);
    }
Ejemplo n.º 7
0
        private void RunInstall(string extensionPath)
        {
            try
            {
                Console.Write("{0} Install ... ", _version);
                var installableExtension = _extensionManager.CreateInstallableExtension(extensionPath);
                var identifier           = installableExtension.Header.Identifier;
                UninstallSilent(identifier);
                _extensionManager.Install(installableExtension, perMachine: false);

                var installedExtension = _extensionManager.GetInstalledExtension(identifier);
                _extensionManager.Enable(installedExtension);
                Console.WriteLine("Succeeded");
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR: {0}", ex.Message);
            }
        }
Ejemplo n.º 8
0
        private void CheckExtension(IVsExtensionManager manager, string target)
        {
            if (IsInDisableCycle && !string.IsNullOrWhiteSpace(target))
            {
                var extension = manager.GetInstalledExtension(target);
                if (extension != null)
                {
                    if (extension.State == EnabledState.Disabled)
                    {
                        manager.Enable(extension);

                        IsInDisableCycle = false;
                    }
                    else
                    {
                        throw new Exception("The extension is not disabled");
                    }
                }
            }
        }