6

我正在尝试读取 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-

4

1 回答 1

5

是的,默认情况下您无法访问该文件夹中的 .lnk 文件。您正在创建一个允许您修改 .lnk 属性的 COM 对象。这需要关闭 UAC 的管理员级别帐户。

是的,您可以使用 manifest来解决这个问题。

于 2010-05-29T12:30:27.953 回答