Воссоздание ярлыка с помощью WSH
Вы можете удалить существующий ярлык и создать новый с новой целью. Чтобы создать новый, вы можете использовать следующий фрагмент:
public void CreateLink(string shortcutFullPath, string target)
{
WshShell wshShell = new WshShell();
IWshRuntimeLibrary.IWshShortcut newShortcut = (IWshRuntimeLibrary.IWshShortcut)wshShell.CreateShortcut(shortcutFullPath);
newShortcut.TargetPath = target;
newShortcut.Save();
}
На данный момент я не вижу способа изменить цель без воссоздания ярлыка.
Примечание. Чтобы использовать фрагмент, необходимо добавить объектную модель хоста сценариев Windows COM к ссылкам проекта.
Изменение целевого пути с помощью Shell32
Вот фрагмент, который изменяет цель ярлыка, не удаляя и не воссоздавая его:
public void ChangeLinkTarget(string shortcutFullPath, string newTarget)
{
// Load the shortcut.
Shell32.Shell shell = new Shell32.Shell();
Shell32.Folder folder = shell.NameSpace(Path.GetDirectoryName(shortcutFullPath));
Shell32.FolderItem folderItem = folder.Items().Item(Path.GetFileName(shortcutFullPath));
Shell32.ShellLinkObject currentLink = (Shell32.ShellLinkObject)folderItem.GetLink;
// Assign the new path here. This value is not read-only.
currentLink.Path = newTarget;
// Save the link to commit the changes.
currentLink.Save();
}
Второй, вероятно, то, что вам нужно.
Примечание: извините, фрагменты в C #, так как я не знаю C ++ / CLI. Если кто-то захочет переписать эти фрагменты для C ++ / CLI, смело редактируйте мой ответ.