private void RunWithHandlingUninstallError(Action uninstallAction) { try { uninstallAction(); } catch (Exception ex) when(ToolUninstallCommandLowLevelErrorConverter.ShouldConvertToUserFacingError(ex)) { var message = new List <string> { string.Format(LocalizableStrings.UpdateToolFailed, _packageId) }; message.AddRange( ToolUninstallCommandLowLevelErrorConverter.GetUserFacingMessages(ex, _packageId)); throw new GracefulException( messages: message, verboseMessages: new[] { ex.ToString() }, isUserError: false); } }
public override int Execute() { var global = _parseResult.ValueForOption <bool>(ToolAppliedOption.GlobalOptionAliases.First()); var toolPath = _parseResult.ValueForOption <string>(ToolAppliedOption.ToolPathOptionAlias); DirectoryPath?toolDirectoryPath = null; if (!string.IsNullOrWhiteSpace(toolPath)) { if (!Directory.Exists(toolPath)) { throw new GracefulException( string.Format( LocalizableStrings.InvalidToolPathOption, toolPath)); } toolDirectoryPath = new DirectoryPath(toolPath); } (IToolPackageStore toolPackageStore, IToolPackageStoreQuery toolPackageStoreQuery, IToolPackageUninstaller toolPackageUninstaller) = _createToolPackageStoresAndUninstaller(toolDirectoryPath); IShellShimRepository shellShimRepository = _createShellShimRepository(toolDirectoryPath); var packageId = new PackageId(_parseResult.ValueForArgument <string>(ToolInstallCommandParser.PackageIdArgument)); IToolPackage package = null; try { package = toolPackageStoreQuery.EnumeratePackageVersions(packageId).SingleOrDefault(); if (package == null) { throw new GracefulException( messages: new[] { string.Format( LocalizableStrings.ToolNotInstalled, packageId), }, isUserError: false); } } catch (InvalidOperationException) { throw new GracefulException( messages: new[] { string.Format( LocalizableStrings.ToolHasMultipleVersionsInstalled, packageId), }, isUserError: false); } try { using (var scope = new TransactionScope( TransactionScopeOption.Required, TimeSpan.Zero)) { foreach (var command in package.Commands) { shellShimRepository.RemoveShim(command.Name); } toolPackageUninstaller.Uninstall(package.PackageDirectory); scope.Complete(); } _reporter.WriteLine( string.Format( LocalizableStrings.UninstallSucceeded, package.Id, package.Version.ToNormalizedString()).Green()); return(0); } catch (Exception ex) when(ToolUninstallCommandLowLevelErrorConverter.ShouldConvertToUserFacingError(ex)) { throw new GracefulException( messages: ToolUninstallCommandLowLevelErrorConverter.GetUserFacingMessages(ex, packageId), verboseMessages: new[] { ex.ToString() }, isUserError: false); } }