Why do i get E_ACCESSDENIED when reading public shortcuts through Shell32?

Posted by corvuscorax on Stack Overflow See other posts from Stack Overflow or by corvuscorax
Published on 2010-05-29T08:59:02Z Indexed on 2010/05/29 9:02 UTC
Read the original article Hit count: 332

Filed under:
|
|
|

I'm trying to read the targets of all desktop shortcuts in a C# 4 application. The shortcuts on a windows desktop can come from more that one location, depending on whether the shortcut is created for all users or just the current user. In this specific case I'm trying to read a shortcut from the public desktop, e.g. from C:\Users\Public\Desktop\shortcut.lnk.

The code is like this (path is a string contaning the path to the lnk file):

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;

The last line throws an System.UnauthorizedAccessException, indicating that it's not allowed to read the shortcut file's contents. I have tried on shortcut files on the user's private desktop (c:\Users\username\Desktop) and that works fine.

So, my questions are:

(1) why is my application not allowed to /read/ the shortcut from code, when I can clearly read the contents as a user?

(2) is there a way to get around this? Maybe using a special manifest file for the application?

And, by the way, my OS is Windows 7, 64-bit.

be well

-h-

© Stack Overflow or respective owner

Related posts about c#

Related posts about .NET