2012-10-26 8 views
7

Mögliche Duplizieren:
Get target of shortcut folderWie bekomme ich den Pfadnamen von einer Dateiverknüpfung? Ausnahme Erste

Zum Beispiel in C:\TEMP\ habe ich eine Verknüpfung mit dem Namen test.dll die Verknüpfung wird an den Dateinamen führen test.dll

Ich will bekommen Von der Verknüpfung nur der Pfadname zu der Datei selbst. Also, ich rufe diese Funktion in einer anderen rekursiven Funktion auf und lege in dieser Funktion jedes Mal ein anderes Verzeichnis von meiner Festplatte ab.

Zum Beispiel ist das erste Verzeichnis C:\TEMP dann in C:\TEMP gibt es die Verknüpfungsdatei, die ich den Pfad nur zu der Datei erhalten möchte. In C:\TEMP für den Test habe ich jetzt drei Dateien:

hpwins23.dat
hpwmdl23.dat
hpwmdl23.dat - Shortcut (C:\TEMP\hpwmdl23.dat)

Also, was ich will ist das bekommen Pfadname der Verknüpfung in diesem Fall seine C: \ TEMP

ich versuchte, diese Funktion zu nutzen:

public string GetShortcutTargetFile(string shortcutFilename) 
     { 
      string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename); 
      string filenameOnly = System.IO.Path.GetFileName(shortcutFilename); 
      Shell shell = new Shell(); 
      Folder folder = shell.NameSpace(pathOnly); 
      if (folder == null) 
      { 
      } 
      else 
      { 
       FolderItem folderItem = folder.ParseName(filenameOnly); 
       if (folderItem != null) 
       { 
        Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink; 
        return link.Path; 
       } 
      } 
      return string.Empty; 
     } 

aber wenn ich die Funktion bin mit und seine auf eine Verknüpfung immer ich bin immer Ausnahmefehler auf der Linie:

Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink //The exception is: NotImplementedException: The method or operation is not implemented 

Was shoud ich tun, um es zu lösen?

Dies ist die vollständige Ausnahme Fehlermeldung:

System.NotImplementedException gefangen wurde
Nachricht = Das Verfahren oder die Operation ist nicht implementiert.
Quelle = GatherLinks
Stacktrace:
bei Shell32.FolderItem.get_GetLink()
bei GatherLinks.Form1.GetShortcutTargetFile(String shortcutFilename) in
D:\C-Sharp\GatherLinks\GatherLinks\GatherLinks\Form1.cs: line904
bei GatherLinks.Form1.offlinecrawling

+0

Dieser Benutzer am meisten wird wahrscheinlich fragen, einen symbolischen Link (nicht eine Verknüpfung wie in LNK) zu lösen, wobei dieser Code wird fehlschlagen. Sie müssen 'GetFinalPathNameByHandle()' mit PInvoke verwenden. Beispielcode finden Sie in diesem [Eintrag hier] (http://chrisbensen.blogspot.com/2010/06/getfinalpathnabyhandle.html). – ykay

Antwort

18

Um das Ziel einer Verknüpfung (.lnk Dateierweiterung) zu erhalten du ich l müssen zuerst die folgenden COM Objekt haben: Windows Script Host Object Model

Dann können Sie WshShell (oder WshShellClass) und IWshShortcut Schnittstellen das Ziel einer Verknüpfung

Beispiel

  string linkPathName = @"D:\Picrofo Autobot.lnk"; // Change this to the shortcut path 

      if (System.IO.File.Exists(linkPathName)) 
      { 
      // WshShellClass shell = new WshShellClass(); 
       WshShell shell = new WshShell(); //Create a new WshShell Interface 
       IWshShortcut link = (IWshShortcut)shell.CreateShortcut(linkPathName); //Link the interface to our shortcut 

       MessageBox.Show(link.TargetPath); //Show the target in a MessageBox using IWshShortcut 
      } 

Dank zu erhalten ,
Ich hoffe, Sie finden das hilfreich :)


Sie können die folgenden Schritte versuchen Windows Script Host Object Model zu einem Projekt

  • Unter Mappen-Explorer, Rechtsklick auf Ihren Projektnamen hinzuzufügen und wählen Verweis hinzufügen
  • die Registerkarte COM Wählen aus das Popup-Fenster
  • Unter Komponentenname, wählen Sie Windows Script Host Objektmodell
  • Klicken Sie auf OK
+0

Ich habe versucht, lnk-Verknüpfung von folgendem Speicherort zu lesen: C: \ ProgramData \ Microsoft \ Windows \ Startmenü \ Programme \ StartUp \ shortcut.lnk und ich bekomme COMException: von HRESULT: 0x80020009 (DISP_E_EXCEPTION). Mein Betriebssystem: Win 8.1 x64 –