Warum muss ich E_ACCESSDENIED erhalten, wenn öffentliche Abkürzungen durch Shell32 lesen?

StackOverflow https://stackoverflow.com/questions/2934420

  •  05-10-2019
  •  | 
  •  

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 -

War es hilfreich?

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top