Perché ricevo E_ACCESSDENIED durante la lettura i collegamenti pubblici attraverso Shell32?

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

  •  05-10-2019
  •  | 
  •  

Domanda

Sto cercando di leggere i bersagli di tutti i collegamenti sul desktop in un C # 4 applicazione. I collegamenti su un desktop di Windows possono provenire da più di una posizione, a seconda se il collegamento viene creato per tutti gli utenti o solo l'utente corrente. In questo caso specifico che sto cercando di leggere un collegamento dal desktop pubblica, per esempio da C:. \ Users \ Public \ Desktop \ shortcut.lnk

Il codice è come questo (percorso è una stringa contaning il percorso del file 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;

L'ultima riga genera uno System.UnauthorizedAccessException, che indica che non è consentito di leggere il contenuto del file di scelta rapida. Ho cercato sul file di collegamento presenti sul desktop privata dell'utente (C: \ Users \ nome utente \ Desktop). E che funziona bene

Quindi, le mie domande sono:

(1) Perché è la mia domanda non posso accedere a / lettura / il collegamento dal codice, quando posso chiaramente leggere il contenuto come un utente?

(2) c'è un modo per aggirare questo? Forse usando un file manifesto speciale per l'applicazione?

E, a proposito, il mio sistema operativo è Windows 7, 64 bit.

essere ben

-h -

È stato utile?

Soluzione

Sì, non è possibile ottenere l'accesso al file .lnk nella cartella di default. Si sta creando un oggetto COM che consente di modificare le proprietà .lnk. E questo richiede un account di livello di amministratore con UAC disattivato.

Sì, si può risolvere che con un manifesto .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top