private void UpdateStartMenuLink()

in Configurator/Core/Server/ServerConfigurationController.cs [3754:3849]


    private void UpdateStartMenuLink()
    {
      CancellationToken.ThrowIfCancellationRequested();
      ReportStatus(Resources.ServerConfigEventShortcutInfo);

      try
      {
        string mysqlStartMenu = $"{((Folder2)GetShell32NameSpaceFolder(ShellSpecialFolderConstants.ssfCOMMONSTARTMENU)).Self.Path}\\Programs\\MySQL\\MySQL Server {ServerInstallation.Version.ToString(2)}\\";
        var folder = GetShell32NameSpaceFolder(mysqlStartMenu);
        if (folder == null)
        {
          ReportStatus(string.Format(Resources.PathDoesNotExist, mysqlStartMenu));
          CurrentStep.Status = ConfigurationStepStatus.Error;
          return;
        }

        var newConfigFilePath = Settings.FullConfigFilePath;
        foreach (FolderItem fi in folder.Items())
        {
          bool saveLink = false;
          CancellationToken.ThrowIfCancellationRequested();
          if (!fi.IsLink || !fi.Name.Contains("Command Line Client"))
          {
            continue;
          }

          var link = (ShellLinkObject)fi.GetLink;
          string arguments = link.Arguments;
          int index = arguments.IndexOf("defaults-file", StringComparison.Ordinal);
          if (index < 0)
          {
            continue;
          }

          index += "defaults-file".Length - 1;
          char next = NextNonWhitespaceChar(arguments, ref index);
          if (next != '=')
          {
            continue;
          }

          next = NextNonWhitespaceChar(arguments, ref index);
          int startIndex = index;
          if (next == '"')
          {
            startIndex = index + 1;
          }

          int endIndex = arguments.IndexOf("\"", startIndex, StringComparison.Ordinal);
          if (endIndex == -1)
          {
            endIndex = arguments.Length;
          }

          string defaultsFileArg = arguments.Substring(startIndex, endIndex - startIndex);
          if (!string.IsNullOrEmpty(newConfigFilePath)
              && !defaultsFileArg.Equals(newConfigFilePath, StringComparison.InvariantCulture))
          {
            arguments = arguments.Replace(defaultsFileArg, newConfigFilePath);
            saveLink = true;
          }

          var namedPipeString = " \"--protocol=Pipe\" \"--get-server-public-key\" \"--ssl-mode=DISABLED\"";
          if (Settings.IsNamedPipeTheOnlyEnabledProtocol)
          {
            arguments += namedPipeString;
            saveLink = true;
          }
          else if (arguments.Contains(namedPipeString))
          {
            arguments = arguments.Replace(namedPipeString, "");
            saveLink = true;
          }

          if (saveLink)
          {
            arguments = arguments.Replace("  ", " ").Trim();
            link.Arguments = arguments;
            link.Save(fi.Path);
          }

          ReportStatus(Resources.ServerConfigEventShortcutSucceeded);
        }

        CurrentStep.Status = ConfigurationStepStatus.Finished;
      }
      catch (Exception ex)
      {
        Logger.LogException(ex);
        ReportStatus(Resources.ServerConfigEventShortcutError);
        if (CurrentStep != null)
        {
          CurrentStep.Status = ConfigurationStepStatus.Error;
        }
      }
    }