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