有没有办法在不使用COM的情况下在C#中以编程方式遵循Windows文件系统快捷方式?

时间:2009-03-11 21:07:43

标签: c# windows shortcuts

回到.NET 1.0天,我写了一个方法来返回MS Windows上快捷方式的目标。它通过使用Windows脚本托管对象模型的互操作和强制通过COM接口实现这一点:

private FileInfo GetFileFromShortcut(FileInfo shortcut)
{
    FileInfo targetFile = null;

    try
    {
        IWshRuntimeLibrary.WshShell wShell = new IWshRuntimeLibrary.WshShellClass();
        IWshRuntimeLibrary.WshShortcut wShortcut = (IWshRuntimeLibrary.WshShortcut)wShell.CreateShortcut(shortcut.FullName);

        // if the file wasn't a shortcut then the TargetPath comes back empty
        string targetName = wShortcut.TargetPath;
        if (targetName.Length > 0)
        {
            targetFile = new FileInfo(targetName);
        }
    }
    catch (Exception)
    { // will return a null targetFile if anything goes wrong
    }

    return targetFile;
}

这仍然让我感到困扰,我希望用更优雅的东西取代它,但前提是替换实际上至少也是如此。我仍然找不到寻找快捷方式目标的本地C#方式。有没有,或者这仍然是做这种事情的最佳方式?

3 个答案:

答案 0 :(得分:1)

看起来有人编写了一个类来操作C#中名为ShellLink的快捷方式文件,但它也使用了COM。

答案 1 :(得分:1)

你不能只打开.lnk或.url文件并解析它吗?

这谈到同样的事情,并显示文件的样子: http://www.programmingtalk.com/showthread.php?t=7335

答案 2 :(得分:0)

我刚才对此感兴趣。

以下是已接受的response,其中包含指向(非正式)description of the format LNK文件的链接。显然,所有可用的方法尚未通过一些API。