代码之家  ›  专栏  ›  技术社区  ›  corvuscorax

当我通过shell32读取公共快捷方式时,为什么会被拒绝?

  •  4
  • corvuscorax  · 技术社区  · 15 年前

    我正在尝试读取C 4应用程序中所有桌面快捷方式的目标。Windows桌面上的快捷方式可以来自多个该位置,具体取决于是为所有用户创建快捷方式,还是仅为当前用户创建快捷方式。在这种特定的情况下,我尝试从公共桌面读取快捷方式,例如从c:\users\public\desktop\shortcut.lnk。

    代码如下(path是包含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:\user s\username\desktop)上尝试了快捷方式文件,但效果很好。

    所以,我的问题是:

    (1)为什么我的应用程序不允许/读取/从代码中快捷方式,当我作为用户可以清楚地读取内容时?

    (2)有没有办法解决这个问题?可能对应用程序使用特殊清单文件?

    顺便说一下,我的操作系统是Windows7,64位。

    很好

    -H-

    1 回复  |  直到 15 年前
        1
  •  3
  •   Community Mohan Dere    8 年前

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

    是的,你可以修一下 with a manifest .

    推荐文章