Exemple #1
0
        private void InstallExtension(IVsExtensionRepository repository, IVsExtensionManager manager, KeyValuePair <string, string> product)
        {
#if DEBUG
            System.Threading.Thread.Sleep(1000);
            return;
#endif

            try
            {
                GalleryEntry entry = repository.CreateQuery <GalleryEntry>(includeTypeInQuery: false, includeSkuInQuery: true, searchSource: "ExtensionManagerUpdate")
                                     .Where(e => e.VsixID == product.Key)
                                     .AsEnumerable()
                                     .FirstOrDefault();

                if (entry != null)
                {
                    IInstallableExtension installable = repository.Download(entry);
                    manager.Install(installable, false);

                    Telemetry.TrackEvent(installable.Header.Name);
                }
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
            }
        }
Exemple #2
0
 private static bool IsUpToDate(IInstallableExtension installableExtension, IInstalledExtension installedExtension)
 {
     return
         (installedExtension.Header.Version == installableExtension.Header.Version &&
          File.GetLastWriteTime(GetManifestPath(installedExtension)) >= File.GetLastWriteTime(installableExtension.PackagePath) &&
          installedExtension.InstalledPerMachine == false);
 }
Exemple #3
0
        private static bool UpdateCanInstalledToCurrentProduct(IInstallableExtension extension)
        {
            var dte2      = serviceProvider.Get <DTE2>();
            var vsVersion = Version.Parse(dte2.Version);

            return(extension.References.Any(t => vsVersion >= t.VersionRange.Minimum && vsVersion <= t.VersionRange.Maximum));
        }
Exemple #4
0
        public void InstallExtension(string vsixPath)
        {
            if (!Exists())
            {
                throw new InvalidOperationException("Cannot install VSIX in non-existing instance.");
            }

            using (var settings = ExternalSettingsManager.CreateForApplication(GetExePath(), Suffix))
            {
                var ems = new ExtensionManagerService(settings);
                IInstallableExtension vsix = ExtensionManagerService.CreateInstallableExtension(vsixPath);

                if (ems.IsInstalled(vsix))
                {
                    IInstalledExtension installedVsix = ems.GetInstalledExtension(vsix.Header.Identifier);
                    ems.Uninstall(installedVsix);
                    if (ems.IsInstalled(vsix))
                    {
                        throw new InvalidOperationException("Could not uninstall already installed GoogleTestAdapter.");
                    }
                }

                ems.Install(vsix, perMachine: false);
                if (!ems.IsInstalled(vsix))
                {
                    throw new InvalidOperationException("Could not install GoogleTestAdapter.");
                }

                ems.Close();
            }
        }
Exemple #5
0
        static void Main(string[] args)
        {
            Log("Starting HostProcess...");

            if (args.Length < 2)
            {
                LogError($"Invalid number of arguments. Expected 3 but was {args.Length}: {string.Join(", ", args)}");
                Environment.Exit(-1);
            }

            string vsixPath   = args[0];
            string devenvPath = args[1];
            string hive       = args.Length == 3 ? args[2] : null;

            try
            {
                IInstallableExtension vsix = ExtensionManagerService.CreateInstallableExtension(vsixPath);

                if (string.IsNullOrWhiteSpace(hive))
                {
                    hive = "";
                }

                PerformInstallation(vsix, devenvPath, hive);
            }
            catch (Exception)
            {
                Environment.Exit(-1);
            }

            Log("Exiting HostProcess...");
        }
        public async Task InstallExtensions(IEnumerable <IExtensionModel> extensionModels)
        {
            bool hasInstalled = false;
            int  count        = extensionModels.Count();

            _progress = new InstallerProgress(count, $"Downloading and installing {count} extension(s)...");
            _progress.Show();

            await Task.Run(() =>
            {
                foreach (IExtensionModel model in extensionModels)
                {
                    try
                    {
                        GalleryEntry entry = _repository.CreateQuery <GalleryEntry>(includeTypeInQuery: false, includeSkuInQuery: true, searchSource: "ExtensionManagerUpdate")
                                             .Where(e => e.VsixID == model.ProductId)
                                             .AsEnumerable()
                                             .FirstOrDefault();

                        if (!_progress.IsVisible)
                        {
                            break;
                        }

                        if (entry != null)
                        {
                            IInstallableExtension installable = _repository.Download(entry);

                            if (!_progress.IsVisible)
                            {
                                break;
                            }

                            _manager.Install(installable, false);
                            hasInstalled = true;

                            var props = new Dictionary <string, string> {
                                { "extension", model.Name }
                            };
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Log(ex);
                    }
                }
            });

            if (_progress.IsVisible)
            {
                _progress.Close();
                _progress = null;
            }

            if (hasInstalled)
            {
                PromptForRestart();
            }
        }
 public static void Install(string vsExe, IInstallableExtension vsix, string rootSuffix)
 {
     using (var esm = ExternalSettingsManager.CreateForApplication(vsExe, rootSuffix))
     {
         var ems = new ExtensionManagerService(esm);
         ems.Install(vsix, perMachine: false);
     }
 }
Exemple #8
0
        public static void UpdateExtension(IInstalledExtension extension, IInstallableExtension installableExtension)
        {
            var extensionManager = serviceProvider.Get <IVsExtensionManager>();

            extensionManager.Disable(extension);
            extensionManager.Uninstall(extension);
            extensionManager.InstallAsync(installableExtension, false);
        }
 public static void Install(string vsExe, IInstallableExtension vsix, string rootSuffix)
 {
     using (var esm = ExternalSettingsManager.CreateForApplication(vsExe, rootSuffix))
     {
         var ems = new ExtensionManagerService(esm);
         ems.Install(vsix, perMachine: false);
     }
 }
        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);
            }
        }
Exemple #11
0
 static void Install(string vsExe, IInstallableExtension vsix, string rootSuffix)
 {
     using (var esm = ExternalSettingsManager.CreateForApplication(vsExe, rootSuffix))
     {
         var ems       = new ExtensionManagerService(esm);
         var installed = ems.GetInstalledExtensions().FirstOrDefault(x => x.Header.Identifier == vsix.Header.Identifier);
         if (installed != null)
         {
             ems.Uninstall(installed);
         }
         ems.Install(vsix, perMachine: false);
     }
 }
        private void InstallExtension(ExtensionEntry extension, IVsExtensionRepository repository, IVsExtensionManager manager)
        {
            GalleryEntry entry = null;

            OnUpdate(string.Format(Resources.Text.InstallingExtension, extension.Name));

            try
            {
                Logger.Log($"{Environment.NewLine}{extension.Name}");
                Logger.Log("  " + Resources.Text.Verifying, false);

                entry = repository.GetVSGalleryExtensions <GalleryEntry>(new List <string> {
                    extension.Id
                }, 1033, false)?.FirstOrDefault();

                if (entry != null)
                {
                    Logger.Log(Resources.Text.Ok); // Marketplace ok
                    Logger.Log("  " + Resources.Text.Downloading, false);
#if !DEBUG
                    IInstallableExtension installable = repository.Download(entry);
#endif
                    Logger.Log(Resources.Text.Ok); // Download ok
                    Logger.Log("  " + Resources.Text.Installing, false);
#if !DEBUG
                    manager.Install(installable, false);
#else
                    Thread.Sleep(2000);
#endif
                    Logger.Log(Resources.Text.Ok); // Install ok
                    Telemetry.Install(extension.Id, true);
                }
                else
                {
                    Logger.Log(Resources.Text.Failed); // Markedplace failed
                }
            }
            catch (Exception)
            {
                Logger.Log(Resources.Text.Failed);
                Telemetry.Install(extension.Id, false);
            }
            finally
            {
                if (entry != null)
                {
                    Store.MarkInstalled(extension);
                }
            }
        }
Exemple #13
0
        public static void Install(string vsExe, IInstallableExtension vsix, string rootSuffix)
        {
            using (var esm = ExternalSettingsManager.CreateForApplication(vsExe, rootSuffix))
            {
                var ems = new ExtensionManagerService(esm);
                IInstalledExtension installedVsix = null;
                if (ems.TryGetInstalledExtension(vsix.Header.Identifier, out installedVsix))
                {
                    Console.WriteLine($"Extension {vsix.Header.Name} version {vsix.Header.Version} already installed, unistalling first.");
                    ems.Uninstall(installedVsix);
                }

                ems.Install(vsix, perMachine: false);
            }
        }
Exemple #14
0
        private void OnNewUpdateFound(IInstallableExtension update)
        {
            var updateBehavior = settingsService.Get(SettingsKeys.AutoUpdateKey, AutoUpdateBehavior.DownloadAndInstall);

            if (updateBehavior == AutoUpdateBehavior.NotificationOnly || (update == null && updateBehavior == AutoUpdateBehavior.DownloadAndInstall))
            {
                string text         = string.Format("There is a new Version of {0} available! [Click here to update](2)", Extension.Header.Name);         // (2) is the command parameter
                var    teamExplorer = serviceProvider.Get <ITeamExplorer>();
                teamExplorer.ShowNotification(text, NotificationType.Information, NotificationFlags.RequiresConfirmation, ShowVSExtensionManagerCommand, GuidList.UpdateNotificationId);
            }
            else if (updateBehavior == AutoUpdateBehavior.DownloadAndInstall && update != null)
            {
                ExtensionUpdater.UpdateExtension(Extension, update);
            }
        }
    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);
    }
Exemple #16
0
        private static IInstalledExtension PerformInstallation(IInstallableExtension vsix, string devenvPath, string hive)
        {
            IInstalledExtension extension;

            using (var settingsManager = ExternalSettingsManager.CreateForApplication(devenvPath, hive))
            {
                var identifier = vsix.Header.Identifier;
                var name       = vsix.Header.Name;

                Log($"Preparing to install '{name}' with identifier '{identifier}' into '{hive}'");

                var extensionManager = new ExtensionManagerService(settingsManager);

                if (extensionManager.TryGetInstalledExtension(identifier, out extension))
                {
                    Log($"Extension '{name}' was already installed. Uninstalling...");
                    try
                    {
                        extensionManager.Uninstall(extension);
                        extensionManager.CommitExternalUninstall(extension);
                    }
                    catch (Exception ex)
                    {
                        LogError($"An error ocurred while trying to uninstall '{name}'. Rolling back...", ex);
                        RevertUninstall(extensionManager, extension);
                        throw;
                    }
                }
                try
                {
                    Log($"Starting installation of '{name}'");
                    extensionManager.Install(vsix, perMachine: false);
                    extension = extensionManager.GetInstalledExtension(identifier);
                    Log($"Installation of '{name}' into '{hive}' completed successfully.");
                }
                catch (Exception ex)
                {
                    LogError($"An error ocurred while trying to install '{name}'. Rolling back...", ex);
                    RevertUninstall(extensionManager, extension);
                    throw;
                }
            }

            return(extension);
        }
Exemple #17
0
        public static bool CheckForUpdate(IInstalledExtension extension, out IInstallableExtension update)
        {
            var _repository = serviceProvider.Get <IVsExtensionRepository>();
            // Find the vsix on the vs gallery
            // IMPORTANT: The .AsEnumerble() call is REQUIRED. Don't remove it or the update service won't work.
            GalleryEntry entry = _repository.CreateQuery <GalleryEntry>(false, true)
                                 .Where(e => e.VsixID == extension.Header.Identifier)
                                 .AsEnumerable()
                                 .FirstOrDefault();

            // If we're running an older version then update
            if (entry != null && entry.NonNullVsixVersion > extension.Header.Version)
            {
                update = _repository.Download(entry);
                return(UpdateCanInstalledToCurrentProduct(update));
            }
            return(CheckForUpdateWithReflection(extension, out update) && UpdateCanInstalledToCurrentProduct(update));
        }
Exemple #18
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);
        }
        public void InstallExtension(ExtensionEntry extension, IVsExtensionRepository repository, IVsExtensionManager manager)
        {
            GalleryEntry entry = null;

            OnUpdate(string.Format("Installing Extension: ", extension.Name));

            try
            {
                Logger.Log($"{Environment.NewLine}{extension.Name}");
                Logger.Log("  " + "Verifying ", false);

                entry = repository.GetVSGalleryExtensions <GalleryEntry>(new List <string> {
                    extension.Id
                }, 1033, false)?.FirstOrDefault();

                if (entry != null)
                {
                    Logger.Log("Marketplace OK"); // Marketplace ok
                    Logger.Log("  " + "Downloading", false);

                    IInstallableExtension installable = repository.Download(entry);
                    Logger.Log("Downloading OK"); // Download ok
                    Logger.Log("  " + "Installing", false);
                    manager.Install(installable, false);
                    Logger.Log("Install OK"); // Install ok
                    Telemetry.Install(extension.Id, true);
                }
                else
                {
                    Logger.Log("Marketplace failed"); // Markedplace failed
                }
            }
            catch (Exception)
            {
                Logger.Log("Install failed exception");
                Telemetry.Install(extension.Id, false);
            }
            finally
            {
            }
        }
        public bool CheckForUpdate(IInstalledExtension extension, out IInstallableExtension update)
        {
            // Find the vsix on the vs gallery
            // IMPORTANT: The .AsEnumerble() call is REQUIRED. Don't remove it or the update service won't work.
            GalleryEntry entry = _repository.CreateQuery<GalleryEntry>(includeTypeInQuery: false, includeSkuInQuery: true, searchSource: "ExtensionManagerUpdate")
                                            .Where(e => e.VsixID == extension.Header.Identifier)
                                            .AsEnumerable()
                                            .FirstOrDefault();

            // If we're running an older version then update
            if (entry != null && entry.NonNullVsixVersion > extension.Header.Version)
            {
                update = _repository.Download(entry);
                return true;
            }
            else
            {
                update = null;
                return false;
            }
        }
        protected override ContextMenuStrip CreateMenu()
        {
            var menuStrip = new ContextMenuStrip();
            var item      = new ToolStripMenuItem("Copy VSIX ID to Clipboard");

            item.Click += (sender, args) =>
            {
                string path = SelectedItemPaths.FirstOrDefault();
                if (string.IsNullOrEmpty(path))
                {
                    return;
                }

                IInstallableExtension vsix = ExtensionManagerService.CreateInstallableExtension(path);

                Clipboard.SetText(vsix.Header.Identifier);
            };

            menuStrip.Items.Add(item);
            return(menuStrip);
        }
        public bool CheckForUpdate(IInstalledExtension extension, out IInstallableExtension update)
        {
            // Find the vsix on the vs gallery
            // IMPORTANT: The .AsEnumerble() call is REQUIRED. Don't remove it or the update service won't work.
            GalleryEntry entry = _repository.CreateQuery <GalleryEntry>(includeTypeInQuery: false, includeSkuInQuery: true, searchSource: "ExtensionManagerUpdate")
                                 .Where(e => e.VsixID == extension.Header.Identifier)
                                 .AsEnumerable()
                                 .FirstOrDefault();

            // If we're running an older version then update
            if (entry != null && entry.NonNullVsixVersion > extension.Header.Version)
            {
                update = _repository.Download(entry);
                return(true);
            }
            else
            {
                update = null;
                return(false);
            }
        }
Exemple #23
0
        protected override bool CanShowMenu()
        {
            var paths = SelectedItemPaths.ToArray();

            if (paths.Length != 1 ||
                Path.GetExtension(paths[0]).ToLowerInvariant() != ".vsix")
            {
                return(false);
            }

            try
            {
                vsix = ExtensionManagerService.CreateInstallableExtension(paths[0]);
            }
            catch (Exception ex)
            {
                LogError($"Unable to load the extension '{paths[0]}'", ex);
                return(false);
            }

            return(vsix != null);
        }
        private void TryInstallVsIntegration([CanBeNull] IVsExtensionManager vsExtensionManager)
        {
            if (vsExtensionManager == null)
            {
                return;
            }

            IInstalledExtension vsIntegrationExtension;

            if (vsExtensionManager.TryGetInstalledExtension(VsIntegrationExtensionId, out vsIntegrationExtension))
            {
                return;
            }

            FileSystemPath thisAssemblyPath = FileSystemPath.TryParse(typeof(VsIntegrationInstaller).Assembly.Location);

            if (thisAssemblyPath.IsNullOrEmpty())
            {
                return;
            }

            FileSystemPath vsixPath = thisAssemblyPath.Directory.Combine(VsIntegrationExtensionId + ".vsix");

            if (!vsixPath.ExistsFile)
            {
                MessageBox.ShowInfo("Does not exist: \"{0}\"".FormatEx(vsixPath.FullPath));
                return;
            }

            IInstallableExtension installableExtension = vsExtensionManager.CreateInstallableExtension(vsixPath.FullPath);
            RestartReason         restartReason        = vsExtensionManager.Install(installableExtension, false);

            if (restartReason != RestartReason.None)
            {
                _restartRequired = true;
            }
        }
        private void Query_ExecuteCompleted(object sender, ExecuteCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                WriteToOutputPane("Error looking up new extension/s in the gallery...");
                _isImportProcessing = false;
                return;
            }

            // Extract results of found extensions
            var foundExtensions       = e.Results.Cast <GalleryEntry>().ToArray();
            var installableExtensions = foundExtensions.Where(entry => _toInstallExtensions.Any(l => l != entry.VsixID)).ToArray();
            var missingExtensions     = _toInstallExtensions.Except(foundExtensions.Select(fe => fe.VsixID)).ToArray();

            if (!installableExtensions.Any())
            {
                WriteToOutputPane("Couldn't find any of the new extension/s in the gallery.");
                _isImportProcessing = false;
                return;
            }

            if (missingExtensions.Any())
            {
                WriteToOutputPane("Couldn't find " + missingExtensions.Length + " of the new extension/s in the gallery.");
            }

            // Download and install the new ones
            WriteToOutputPane("Installing new extension/s:");
            var wasAnInstallSuccessful = false;

            foreach (var installableExtension in installableExtensions)
            {
                var msg = string.Format(" - '{0}' ", installableExtension.Name);

                IInstallableExtension extension = null;
                try
                {
                    extension = _repository.Download(installableExtension);
                    _manager.Install(extension, false);
                    msg += "installed.";
                    wasAnInstallSuccessful = true;
                }
                catch (Exception ex)
                {
                    msg += "install failed. " + ex.Message;
                }

                WriteToOutputPane(msg);
            }

            if (wasAnInstallSuccessful)
            {
                WriteToOutputPane(Environment.NewLine + Environment.NewLine + "Please restart for changes to take affect.");
            }

            WriteToOutputPane("Extensions imported.");

            // Reset
            _isImportProcessing  = false;
            _toInstallExtensions = new string[] { };
        }
 static void Install(string vsExe, IInstallableExtension vsix, string rootSuffix)
 {
     using (var esm = ExternalSettingsManager.CreateForApplication(vsExe, rootSuffix))
     {
         var ems = new ExtensionManagerService(esm);
         var installed = ems.GetInstalledExtensions().FirstOrDefault(x => x.Header.Identifier == vsix.Header.Identifier);
         if (installed != null)
             ems.Uninstall(installed);
         ems.Install(vsix, perMachine: false);
     }
 }
Exemple #27
0
 public static void InstallIntoDefaultRoot(string vsExe, IInstallableExtension vsix)
 {
     Install(vsix, () => ExternalSettingsManager.CreateForApplication(vsExe));
 }
Exemple #28
0
 public static void InstallIntoCustomRoot(string vsExe, IInstallableExtension vsix, string rootSuffix)
 {
     Install(vsix, () => ExternalSettingsManager.CreateForApplication(vsExe, rootSuffix));
 }
Exemple #29
0
 public static void Install(IInstallableExtension vsix, Func<ExternalSettingsManager> GetExternalSettingsManager)
 {
     using (var externalSettingsManager = GetExternalSettingsManager())
     {
         (new ExtensionManagerService(externalSettingsManager)).Install(vsix, perMachine: false);
     }
 }
Exemple #30
0
        private async System.Threading.Tasks.Task ExtMgrInstallExtensionAsync()
        {
            GalleryEntry entry = null;

            try
            {
                // Waits for MEF to initialize before the extension manager is ready to use
                var scComponentModel = VSPackageInstaller.VSPackage.GetGlobalService(typeof(SComponentModel));

                IVsExtensionRepository repository = VSPackageInstaller.VSPackage.GetGlobalService(typeof(SVsExtensionRepository)) as IVsExtensionRepository;
                IVsExtensionManager    manager    = VSPackageInstaller.VSPackage.GetGlobalService(typeof(SVsExtensionManager)) as IVsExtensionManager;

                Logger.Log($"{Environment.NewLine}{this.Extension.Title}");
                Logger.Log("  " + "Verifying ", false);


                entry = repository.GetVSGalleryExtensions <GalleryEntry>(new System.Collections.Generic.List <string> {
                    this.Extension.VsixId.ToString()
                }, 1033, false)?.FirstOrDefault();

                if (entry != null)
                {
                    // ensure that we update the URL if it is empty
                    if (entry.DownloadUrl == null)
                    {
                        entry.DownloadUrl = this.Extension.Installer;
                        throw new Exception("This is not a VsiX");
                    }

                    Logger.Log("Marketplace OK"); // Marketplace ok
                    Logger.Log("  " + "Downloading");

                    IInstallableExtension installable = repository.Download(entry);
                    if (installable == null)
                    {
                        throw new Exception("This is not a VsiX");
                    }

                    Logger.Log("Downloading OK"); // Download ok
                    Logger.Log("  " + "Installing");
                    manager.Install(installable, false);
                    Logger.Log("Installation queued OK"); // Install ok
                    Logger.Log("This extension package will now be automatically installed when you exist all instances of Visual Studio");
                }
                else
                {
                    Logger.Log("Marketplace failed"); // Markedplace failed
                    // This is not a VsiX
                    throw new Exception("This is not a VsiX");
                    Logger.Log("Done");
                }
            }
            catch (Exception ex)
            {
                Logger.Log("Extension Manager installtion failed exception: " + ex);
                Logger.Log("Trying manual downloand and install");
                await this.ManualInstallExtensionAsync();
            }
            finally
            {
                await System.Threading.Tasks.Task.Yield();
            }
        }
Exemple #31
0
        private RestartReason InstallExtension(ExtensionEntry extension, IVsExtensionRepository repository, IVsExtensionManager manager)
        {
            GalleryEntry entry = null;

            OnUpdate(string.Format("{0} ({1})", _settings.ResourceProvider.InstallingExtension, extension.Name));
            var ret = RestartReason.None;

            try
            {
                _logger.Log($"{Environment.NewLine}{extension.Name}");
                _logger.Log("  " + _settings.ResourceProvider.Verifying, false);

                entry = repository.GetVSGalleryExtensions <GalleryEntry>(new List <string> {
                    extension.Id
                }, 1033, false)?.FirstOrDefault();

                if (entry != null)
                {
                    _logger.Log(_settings.ResourceProvider.Ok); // Marketplace ok
#if DEBUG || true
                    var extensionsByAuthor = manager.GetInstalledExtensions().GroupBy(x => x.Header.Author).Select(y => new { y.Key, items = y }).ToArray();
#endif
                    var installed = manager.GetInstalledExtensions().SingleOrDefault(n => n.Header.Identifier == extension.Id);
                    _logger.Log("  " + _settings.ResourceProvider.Verifying, false);
                    IInstallableExtension installable = null;

                    if (installed != null)
                    {
                        if (NewerVersionExists(installed, repository, entry))
                        {
                            installed = null;
                        }
                    }
                    _logger.Log("  " + _settings.ResourceProvider.Ok);
                    if (installed == null)
                    {
                        _logger.Log("  " + _settings.ResourceProvider.Downloading, false);
                        installable = repository.Download(entry);
                        _logger.Log(_settings.ResourceProvider.Ok); // Download ok
                    }

                    if (installable == null)
                    {
                        _logger.Log(" nothing to do");
                    }
                    else
                    {
                        _logger.Log("  " + _settings.ResourceProvider.Installing, false);

                        ret = manager.Install(installable, false);
                        _logger.Log(_settings.ResourceProvider.Ok); // Install ok
                    }

                    Telemetry.Install(extension.Id, true);
                }
                else
                {
                    _logger.Log(_settings.ResourceProvider.Failed); // Markedplace failed
                }
            }
            catch (Exception e)
            {
                _logger.Log(_settings.ResourceProvider.Failed);
                _logger.Log("Failed to install package: " + e.Message);
                _log.Error(e);
                Telemetry.Install(extension.Id, false);
            }
            finally
            {
                if (entry != null)
                {
                    Store.MarkInstalled(extension);
                }
            }

            return(ret);
        }
Exemple #32
0
        private static bool CheckForUpdateWithReflection(IInstalledExtension extension, out IInstallableExtension update)
        {
            var _repository = serviceProvider.Get <IVsExtensionRepository>();

            update = null;
            var extensionRepositoryService = serviceProvider.Get <IVsExtensionRepository>();
            var methodInfo = extensionRepositoryService.GetType().GetMethod("GetRepositories");

            if (methodInfo != null)
            {
                IEnumerable <IInstalledExtension> extensionsToCheck = new List <IInstalledExtension> {
                    extension
                };
                var repositories = methodInfo.Invoke(extensionRepositoryService, new object[0]) as IEnumerable <object>;
                if (repositories != null)
                {
                    var onlineExtension = ((from repository in repositories.ToList()
                                            let getUpdateMethod = repository.GetType().GetMethod("GetUpdates")
                                                                  where getUpdateMethod != null
                                                                  let repo = repository
                                                                             select Check.TryCatch <IEnumerable <object>, Exception>(() => getUpdateMethod.Invoke(repo, new object[] { extensionsToCheck }) as IEnumerable <object>)
                                                                             into possibleUpdates
                                                                             where possibleUpdates != null
                                                                             select possibleUpdates.FirstOrDefault())).ToList().OfType <IVsExtension>().FirstOrDefault();
                    {
                        if (onlineExtension != null)
                        {
                            bool isAllreadyInstalled = onlineExtension.GetType().GetProperty("UpdateIsInstalled").GetValue(onlineExtension) as bool? ?? false;
                            if (!isAllreadyInstalled)
                            {
                                var updateEntry = onlineExtension.GetType().GetProperty("UpdateEntry").GetValue(onlineExtension) as IRepositoryEntry;
                                if (updateEntry != null)
                                {
                                    update = _repository.Download(updateEntry);
                                }
                                return(true);
                            }
                        }
                    }
                }
            }
            return(false);
        }
Exemple #33
0
 public RestartReason Install(IInstallableExtension extension, bool perMachine)
 {
     throw new NotImplementedException();
 }
Exemple #34
0
 public void InstallAsync(IInstallableExtension extension, bool perMachine)
 {
     throw new NotImplementedException();
 }