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); }
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); }
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); } }