Exemple #1
0
        public bool Uninstall(string id, bool skipGlobal)
        {
            if (!extensionManager.TryGetInstalledExtension(id, out var _))
            {
                return(false);
            }

            while (extensionManager.TryGetInstalledExtension(id, out var installedExtension))
            {
                if (skipGlobal && installedExtension.InstalledPerMachine)
                {
                    return(false);
                }

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

                DirectoryUtil.DeleteHard(installedExtension.InstallPath, true);
                ExtensionManagerUtil.RemovePendingExtensionDeletion(externalSettingsManager, installedExtension.Header);

                // Reset extension manager cache
                ExtensionManagerService.Dispose();
                extensionManager = ExtensionManagerService.Create(externalSettingsManager);
            }

            return(true);
        }
Exemple #2
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);
        }
Exemple #3
0
        private int Run(string applicationPath, string rootSuffix, string[] args)
        {
            try
            {
                if (!ExtensionManagerUtil.IsValidProcessFileName(applicationPath, out var expectedFileName))
                {
                    return(StartProcess(expectedFileName));
                }

                var commands = new Dictionary <string, Func <int> >
                {
                    {
                        "Install", () =>
                        {
                            var extensionPaths = CommandLineParser.Many(args, "Install");
                            return(Installer.Install(applicationPath, rootSuffix, extensionPaths, allUsers: false));
                        }
                    },
                    {
                        "InstallAndStart", () =>
                        {
                            var extensionPaths = CommandLineParser.Many(args, "InstallAndStart");
                            var result         = Installer.Install(applicationPath, rootSuffix, extensionPaths, allUsers: false);
                            using (var retryFilter = new RetryMessageFilter())
                            {
                                var dte     = VisualStudioUtil.GetDteFromDebuggedProcess(Process.GetCurrentProcess());
                                var process = Process.Start(applicationPath, $"/RootSuffix {rootSuffix}");
                                if (dte != null)
                                {
                                    VisualStudioUtil.AttachDebugger(dte, process);
                                }
                                return(result);
                            }
                        }
                    },
                    {
                        "Uninstall", () =>
                        {
                            var extensionIds = CommandLineParser.Many(args, "Uninstall");
                            return(Installer.Uninstall(applicationPath, rootSuffix, extensionIds, skipGlobal: false));
                        }
                    },
                    {
                        "IsProfileInitialized", () =>
                        {
                            using (var externalSettingsManager = ExternalSettingsManager.CreateForApplication(applicationPath, rootSuffix))
                            {
                                var settings             = externalSettingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
                                var isProfileInitialized = settings.CollectionExists("Profile") && settings.GetPropertyNames("Profile").Contains("LastResetSettingsFile");
                                return(Convert.ToInt32(isProfileInitialized));
                            }
                        }
                    },
                };

                foreach (var cmd in commands)
                {
                    if (CommandLineParser.Contains(args, cmd.Key))
                    {
                        return(cmd.Value());
                    }
                }

                throw new Exception($@"Invalid command");
            }
            catch (Exception e)
            {
                Console.Error.Write(e.ToString());
                return(-1);
            }
        }