Есть ли способ следовать ярлыкам файловой системы Windows программно в C# без использования COM?

Вернувшись в.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 ответа

Похоже, кто-то написал класс для управления файлами ярлыков в C# под названием ShellLink, но он тоже использует COM.

Разве вы не можете просто открыть файл.lnk или.url и проанализировать его?

Это говорит об одном и том же и показывает, как выглядят файлы: http://www.programmingtalk.com/showthread.php?t=7335

Я тоже заинтересовался этим некоторое время назад.

Вот принятый ответ со ссылкой на (неформальное) описание формата файлов LNK. По-видимому, все доступные методы пока проходят через некоторый API.

Другие вопросы по тегам