Warum muss ich E_ACCESSDENIED erhalten, wenn öffentliche Abkürzungen durch Shell32 lesen?
Frage
Ich versuche, die Ziele aller Desktop-Verknüpfungen in einer C # 4-Anwendung zu lesen. Die Verknüpfungen auf einem Windows-Desktop kann von mehr als einem Ort kommen, je nachdem, ob die Verknüpfung für alle Benutzer erstellt oder nur den aktuellen Benutzer. In diesem speziellen Fall versuche ich, eine Verknüpfung aus dem öffentlichen Desktop zu lesen, zum Beispiel aus. C: \ Users \ Public \ Desktop \ Verknüpfung.lnk
Der Code ist wie folgt (Pfad ein String ist contaning den Pfad der LNK-Datei):
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 wirft einen System.UnauthorizedAccessException, was darauf hinweist, dass es nicht erlaubt ist, die Verknüpfungsdatei den Inhalt zu lesen. Ich habe versucht, auf Shortcut-Dateien auf dem privaten Desktop des Benutzers (c: \ Benutzer \ Benutzername \ Desktop). Und das funktioniert gut
Also, meine Fragen sind:
(1) Warum wird meine Bewerbung / lesen / die Verknüpfung von Code nicht erlaubt, wenn ich klar den Inhalt als Benutzer lesen kann?
(2) ist es eine Möglichkeit, dies zu umgehen? eine spezielle Manifest-Datei für die Anwendung vielleicht mit?
Und, nebenbei bemerkt, mein Betriebssystem ist Windows 7 64-bit.
gut sein
h -
Lösung
Ja, Sie können keinen Zugriff auf die LNK-Datei in dem Ordner standardmäßig erhalten. Sie erstellen ein COM-Objekt, das Sie die LNK-Eigenschaften ändern können. Und das erfordert ein Administrator-Ebene-Konto mit UAC ausgeschaltet.
Ja, können Sie beheben, dass die mit einem Manifest .