Warum erhalte ich E_ACCESSDENIED, wenn ich öffentliche Verknüpfungen über Shell32 lese?

Ich versuche, die Ziele aller Desktop-Verknüpfungen in einer C # 4-Anwendung zu lesen. Die Verknüpfungen auf einem Windows-Desktop können von mehreren Standorten stammen, je nachdem, ob die Verknüpfung für alle Benutzer oder nur für den aktuellen Benutzer erstellt wurde. In diesem speziellen Fall versuche ich, eine Verknüpfung vom öffentlichen Desktop zu lesen, z. aus C: \ Users \ Public \ Desktop \ shortcut.lnk.

Der Code sieht folgendermaßen aus (path ist ein String, der den Pfad zur lnk-Datei enthält):

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;

Die letzte Zeile löst eine System.UnauthorizedAccessException aus, die angibt, dass der Inhalt der Verknüpfungsdatei nicht gelesen werden darf. Ich habe Verknüpfungsdateien auf dem privaten Desktop des Benutzers (c: \ Users \ username \ Desktop) ausprobiert und das funktioniert einwandfrei.

Also, meine Fragen sind:

(1) Warum darf meine Anwendung die Verknüpfung zum Code nicht / lesen /, wenn ich als Benutzer die Inhalte klar lesen kann?

(2) Gibt es eine Möglichkeit, dies zu umgehen? Verwenden Sie möglicherweise eine spezielle Manifestdatei für die Anwendung?

Und mein Betriebssystem ist übrigens Windows 7, 64-Bit.

gut sei

-h-

Antworten auf die Frage(2)

Ihre Antwort auf die Frage