我正在尝试读取 C# 4 应用程序中所有桌面快捷方式的目标。Windows 桌面上的快捷方式可以来自多个位置,具体取决于快捷方式是为所有用户创建的,还是仅为当前用户创建的。在这种特定情况下,我试图从公共桌面读取快捷方式,例如从 C:\Users\Public\Desktop\shortcut.lnk。
代码是这样的(路径是一个包含 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;
最后一行抛出 System.UnauthorizedAccessException,表示不允许读取快捷方式文件的内容。我已经尝试过用户私人桌面(c:\Users\username\Desktop)上的快捷方式文件,效果很好。
所以,我的问题是:
(1) 当我作为用户可以清楚地读取内容时,为什么我的应用程序不允许 /read/ 从代码中读取快捷方式?
(2)有没有办法解决这个问题?也许为应用程序使用特殊的清单文件?
而且,顺便说一下,我的操作系统是 Windows 7,64 位。
好起来
-H-