Почему я получаю E_ACCESSDENIED при чтении публичных ярлыков через Shell32?

Я пытаюсь прочитать цели всех ярлыков на рабочем столе в приложении C # 4. Ярлыки на рабочем столе Windows могут поступать из нескольких мест в зависимости от того, создан ли ярлык для всех пользователей или только для текущего пользователя. В этом конкретном случае я пытаюсь прочитать ярлык с общедоступного рабочего стола, например, из C: \ Users \ Public \ Desktop \ shortcut.lnk.

Код выглядит следующим образом (путь - это строка, содержащая путь к файлу lnk):

var shell = new Shell32.ShellClass();
var folder = shell.NameSpace(Path.GetDirectoryName(path));
var folderItem = folder.ParseName(Path.GetFileName(path));
if (folderItem != null)
{
    var link = (Shell32.ShellLinkObject)folderItem.GetLink;

В последней строке выдается исключение System.UnauthorizedAccessException, указывающее, что запрещено читать содержимое файла ярлыка. Я пробовал ярлыки на личном рабочем столе пользователя (c: \ Users \ username \ Desktop), и это прекрасно работает.

Итак, мои вопросы:

(1) почему моему приложению не разрешено / читать / ярлык из кода, когда я могу четко читать содержимое как пользователь?

(2) есть ли способ обойти это? Может быть, использовать специальный файл манифеста для приложения?

И, кстати, моя ОС - Windows 7, 64-битная.

всего хорошего

-час-

Ответы на вопрос(1)

Ваш ответ на вопрос