Pourquoi dois-je obtenir E_ACCESSDENIED lors de la lecture des raccourcis publics par Shell32?

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

  •  05-10-2019
  •  | 
  •  

Question

Je suis en train de lire les cibles de tous les raccourcis de bureau dans une application C # 4. Les raccourcis sur un ordinateur de bureau Windows peuvent provenir de plus d'un emplacement, selon que le raccourci est créé pour tous les utilisateurs ou tout simplement l'utilisateur actuel. Dans ce cas spécifique, je suis en train de lire un raccourci du bureau du public, par exemple de C:. \ Users Public \ Desktop \ shortcut.lnk

Le code est comme celui-ci (chemin d'accès est une chaîne contaning le chemin vers le fichier .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;

La dernière ligne jette un System.UnauthorizedAccessException, ce qui indique qu'il n'a pas le droit de lire le contenu du fichier de raccourci. J'ai essayé sur les fichiers raccourci sur le bureau privé de l'utilisateur (c: \ Users \ nom d'utilisateur \ Desktop). Et qui fonctionne très bien

Alors, mes questions sont:

(1) pourquoi ma demande pas autorisé à / lire / le raccourci à partir du code, quand je peux lire clairement le contenu en tant qu'utilisateur?

(2) est-il un moyen de contourner ce problème? en utilisant peut-être un fichier manifeste spécial pour l'application?

Et, en passant, mon système d'exploitation est Windows 7, 64 bits.

bien

-h -

Était-ce utile?

La solution

Oui, vous ne pouvez pas accéder au fichier .lnk dans ce dossier par défaut. Vous créez un objet COM qui vous permet de modifier les propriétés .lnk. Et cela exige un compte de niveau administrateur avec l'UAC désactivé.

Oui, vous pouvez résoudre ce problème avec un manifeste .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top