Можно ли программно создать глобальный ярлык .lnk?

В настоящее время я создаю ярлык программно, однако я хочу знать, возможно ли в С# создать глобальный ярлык аналогичным образом.

Ниже мой код:

WshShell shell = new WshShell();
string shortcutLocation = "pathToShortcut//Shortcut1.lnk"
IWshShortcut shortcut = shell.CreateShortcut(shortcutLocation);
shortcut.Arguments = "foo bar";
shortcut.Description = "Test Shortcut";
shortcut.TargetPath = "pathToShortcutExe";
shortcut.WorkingDirectory = "pathToWorkingDirectory"
shortcut.Save();

Этот код отлично работает для создания ярлыка для пользователя, но я хочу знать, существует ли способ сделать это для системы. Я видел, как глобально установленные программы размещают ярлыки для всех пользователей, поэтому мне любопытно, как добиться этого эффекта на С#.


person Unome    schedule 27.07.2015    source источник


Ответы (1)


Да, вы можете... вы должны добавить ссылку Проект > Добавить ссылку > COM > Объектная модель Windows Script Host.

    using IWshRuntimeLibrary;

    private void CreateShortcut()
    {
      object shDesktop = (object)"Desktop";
      WshShell shell = new WshShell();
      string shortcutAddress = (string)shell.SpecialFolders.Item(ref shDesktop) + @"\Notepad.lnk";
      IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutAddress);
      shortcut.Description = "New shortcut for a Notepad";
      shortcut.Hotkey = "Ctrl+Shift+N";
      shortcut.TargetPath = Environment.GetFolderPath(Environment.SpecialFolders.System) + @"\notepad.exe";
      shortcut.Save();
    }
person Obadah Hammoud    schedule 27.07.2015
comment
Не могли бы вы немного рассказать о том, что такое объект shDesktop? Это, кажется, основное отличие в том, что вы добавили. +1 - person Unome; 28.07.2015
comment
Также мне любопытно, как это делает ярлык глобальным? - person Unome; 28.07.2015
comment
Это в основном строка, ее содержимое — рабочий стол, поэтому мы могли бы добавить ссылку на этот объект, чтобы иметь возможность вызывать его в функции SpecialFolders.Item(). - person Obadah Hammoud; 28.07.2015
comment
потому что параметр должен быть объектом.. проверьте этот URL-адрес msdn.microsoft.com/en-us/library/0ea7b5xe(v=vs.84).aspx Если я могу вам помочь, пожалуйста, примите мое решение - person Obadah Hammoud; 28.07.2015
comment
Я не принял, потому что я еще не смог проверить, что это работает. Я запустил код, и он создал ярлык блокнота на моем рабочем столе, но не на рабочем столе других пользователей. Я также просмотрел статью, на которую вы ссылаетесь, и увидел, что вы можете поменять местами специальные папки оболочки на другие параметры, и вместо этого я использовал AllUsersDesktop, и я думаю, что, возможно, это сработает, но до сих пор не смог проверить - person Unome; 28.07.2015