无法找到快捷方式的目标

时间:2014-01-26 20:28:08

标签: c# console-application shortcut

我正在尝试创建一个小程序,用于在C#(控制台应用程序)中向用户检索快捷方式的目标文件名。 我的代码没有错误,但它没有给我正确的结果。

这是我的代码:(来自:http://snipplr.com/view/47974

private static string GetTargetPath(string ShortcutPath)
{
    string pathOnly = System.IO.Path.GetDirectoryName(ShortcutPath);
    string filenameOnly = System.IO.Path.GetFileName(ShortcutPath);

    Shell32.Shell shell = new Shell32.ShellClass();
    Shell32.Folder folder = shell.NameSpace(pathOnly);
    Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
    if (folderItem != null)
    {
        Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
        return link.Path;
    }
    return ""; // not found
}

正如我所说,代码检索错误输出(空字符串),即使文件存在。 例如,我厌倦了在路径中获取某些快捷方式的目标文件:C:\ Users \ Admin123 \ AppData \ Roaming \ Microsoft \ Office \ Recent

这个问题的原因是什么?我该如何解决呢?

修改

我再次尝试了相同的代码,现在它可以工作了!谢谢大家 ! :)

1 个答案:

答案 0 :(得分:1)

好吧,我发现您的代码没有任何问题。经过测试,效果很好。

我创建了两个链接:boot.lnkprestigio_notes.lnk,两者都指向正确的文件。他们的输出是:

分别为

D:\Boot1.asmD:\Dokumenty\Android\Prestigio\doc\prestigio_notes.txt

这是我使用的代码(抱歉再次复制粘贴函数,但我希望它是一个完整而清晰的类):

class Program {
    static void Main(string[] args) {
        Console.WriteLine(GetTargetPath(@"D:\boot.lnk"));
        Console.WriteLine(GetTargetPath(@"D:\prestigio_notes.lnk"));
        Console.ReadLine();
    }

    private static string GetTargetPath(string ShortcutPath) {
        string pathOnly = System.IO.Path.GetDirectoryName(ShortcutPath);
        string filenameOnly = System.IO.Path.GetFileName(ShortcutPath);

        Shell32.Shell shell = new Shell32.Shell();
        Shell32.Folder folder = shell.NameSpace(pathOnly);
        Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
        if (folderItem != null) {
            Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
            return link.Path;
        }
        return ""; // not found
    }
}

检查您是否从可用引用列表中引用了正确的COM对象。如果失败,请检查您是否有权从指定位置读取。