Zurück in .NET 1.0 Tage habe ich eine Methode geschrieben, um das Ziel einer Verknüpfung auf MS Windows zurückzugeben. Sie tat dies durch eine Interop in das Windows-Script mit Object Model und Brute über die COM-Schnittstelle gezwungen Hosting:Gibt es eine Möglichkeit, Windows-Dateisystem-Verknüpfungen programmgesteuert in C# ohne COM zu folgen?
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;
}
Dieses noch nervt mich, und ich war auf der Suche diese mit etwas eleganter, zu ersetzen, sondern nur dann, wenn die Ersatz funktioniert auch mindestens so gut. Ich kann immer noch keine native C# Möglichkeit finden, das Ziel einer Verknüpfung zu finden. Gibt es einen, oder ist das immer noch der beste Weg, diese Art von Ding zu machen?
Große Frage. Ich habe nicht darüber nachgedacht, wie ich das ohne COM-Interoperabilität – Sung
funktionierte. Ich konnte nicht vermeiden, die Shell über nicht verwalteten Code zu verwenden, um dies leider zu erreichen. – RobS