2012-10-22 7 views
7

Um eine kurze Geschichte zu machen, muss ich eine Verknüpfung zu einem Ordner mit C# erstellen. Ich habe gelesen mit IWshRuntimeLibrary. Wenn ich alles mit IWshRuntimeLibrary versuche, bekomme ich alle Arten von Mehrdeutigkeitsfehlern mit System.IO.File. Ich nehme an, dies ist, weil es eine IWshRuntimeLibrary.File Schnittstelle zusammen mit System.IO.File gibt. Alles, was ich wirklich finden konnte, sind Artikel über Verknüpfungen zu Apps, nicht zu Ordnern.Erstellen einer Verknüpfung zu einem Ordner in C#

Mehrdeutigkeit Fehler beiseite:

  • Ist das das richtige Werkzeug für Ordner-Verknüpfungen verwenden?
  • Wie erstelle ich eine Verknüpfung mit dieser
  • Wie gebe ich dem die Verknüpfung

Ebenfalls platziert ist, wenn ich versuche, eine Verknüpfung zu einem Ordner zu erstellen, sagen C:\TEMP dies mit:

IWshShortcut shortcut; 
wshShell = new WshShellClass(); 
shortcut = (IWshShortcut)wshShell.CreateShortcut(@"C:\TEMP"); 

shortcut.TargetPath = @"C:\Documents and Settings"; 

Ich bekomme eine COMException. Nach dem, was ich gelesen habe, sollte dies eine Verknüpfung zum C Laufwerk Temp-Ordner erstellen und die Verknüpfung in den Dokumenten und Einstellungen.

+0

Mögliche doppelte: http://stackoverflow.com/questions/3391923/placing-a-shortcut-in-users- startup-folder-to-start-with-windows –

+0

Um Ihre Mehrdeutigkeitsfehler loszuwerden, stellen Sie sicher, wenn Sie die .NET-Dateiklasse verwenden möchten, rufen Sie System.IO.File und IWhRuntimeLibrary.File, wenn Sie das andere verwenden . Dieses Problem passiert mir die ganze Zeit, wenn ich einen Timer in einer Klasse verwenden möchte, die beide System.Windows.Forms und System.Threading verwendet, da beide eine Timer-Klasse enthalten. Entschuldigung, ich kann nicht mit deinem Hauptproblem helfen. –

+0

@ ademing2, Ich dachte, das wäre, was ich tun müsste, aber bevor ich das vor allen meinen System.IO.File-Methodenaufrufen hinzufügte, wollte ich sehen, ob ich auf dem richtigen Weg war. Danke, obwohl – swabs

Antwort

7

Vergessen Sie nicht, eingebettete Interop-Typen auf False zu setzen, um Interop.IWshRuntimeLibrary zu referenzieren. Ich habe getestet und funktioniert ohne einen Fehler zu bekommen.

// Make sure you use try/catch block because your App may has no permissions on the target path! 
    try 
    { 
    CreateShortcut(@"C:\temp", @"C:\MyShortcutFile.lnk", 
     "Custom Shortcut", "/param", "Ctrl+F", @"c:\"); 
    } 
    catch (Exception ex) 
    { 
    Console.WriteLine(ex.Message); 
    } 



    /// <summary> 
    /// Create Windows Shorcut 
    /// </summary> 
    /// <param name="SourceFile">A file you want to make shortcut to</param> 
    /// <param name="ShortcutFile">Path and shorcut file name including file extension (.lnk)</param> 
    public static void CreateShortcut(string SourceFile, string ShortcutFile) 
    { 
     CreateShortcut(SourceFile, ShortcutFile, null, null, null, null); 
    } 

    /// <summary> 
    /// Create Windows Shorcut 
    /// </summary> 
    /// <param name="SourceFile">A file you want to make shortcut to</param> 
    /// <param name="ShortcutFile">Path and shorcut file name including file extension (.lnk)</param> 
    /// <param name="Description">Shortcut description</param> 
    /// <param name="Arguments">Command line arguments</param> 
    /// <param name="HotKey">Shortcut hot key as a string, for example "Ctrl+F"</param> 
    /// <param name="WorkingDirectory">"Start in" shorcut parameter</param> 
    public static void CreateShortcut(string TargetPath, string ShortcutFile, string Description, 
     string Arguments, string HotKey, string WorkingDirectory) 
    { 
     // Check necessary parameters first: 
     if (String.IsNullOrEmpty(TargetPath)) 
     throw new ArgumentNullException("TargetPath"); 
     if (String.IsNullOrEmpty(ShortcutFile)) 
     throw new ArgumentNullException("ShortcutFile"); 

     // Create WshShellClass instance: 
     var wshShell = new WshShellClass(); 

     // Create shortcut object: 
     IWshRuntimeLibrary.IWshShortcut shorcut = (IWshRuntimeLibrary.IWshShortcut)wshShell.CreateShortcut(ShortcutFile); 

     // Assign shortcut properties: 
     shorcut.TargetPath = TargetPath; 
     shorcut.Description = Description; 
     if (!String.IsNullOrEmpty(Arguments)) 
     shorcut.Arguments = Arguments; 
     if (!String.IsNullOrEmpty(HotKey)) 
     shorcut.Hotkey = HotKey; 
     if (!String.IsNullOrEmpty(WorkingDirectory)) 
     shorcut.WorkingDirectory = WorkingDirectory; 

     // Save the shortcut: 
     shorcut.Save(); 
    } 

Quelle: http://zayko.net/post/How-to-create-Windows-shortcut-(C).aspx

+1

Genau das, was ich gesucht habe, war ich auch nah an dieser Lösung. Ich habe gerade nicht meine .lnk für die Verknüpfungsdatei benannt – swabs

1

Eine Lösung, die IShellLink auf Experten-Austausch verwendet:

Creating Shortcuts in .NET

Bietet eine verwaltete Schicht für Sie Datei- und Ordner shorcuts zu erstellen.

Es ist VB.NET, aber Sie können es mit freien Konvertern in C# konvertieren.

3

Du hast es umgekehrt: Sie versuchen, C:\Temp eine Verknüpfung zu Ihrer C:\Documents and Settings Ordner zu machen.

folgender Ausschnitt wird eine Verknüpfung zu einem Netzwerkordner auf dem Desktop erstellen:

var desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 
IWshShortcut shortcut; 
var wshShell = new WshShellClass(); 
shortcut = (IWshShortcut)wshShell.CreateShortcut(Path.Combine(desktop, @"Temp.lnk")); 
shortcut.TargetPath = @"\\computername\sharename"; 
shortcut.Save(); 
+1

Ich weiß, dass es für immer gewesen ist, aber ich versuche, diese Methode zu verwenden, um einen Link zu einem Ordner wie 2.7.1 zu erstellen, und wenn ich versuche, auf klicken Die resultierende Verknüpfung Windows versucht, den Ordner wie eine Datei zu öffnen. Haben Sie Bedenken, dass Windows eine Verknüpfung zu einem Ordner herstellt? –

Verwandte Themen