Есть ли способ следовать ярлыкам файловой системы 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.