2012-10-22 16 views
7

Aby zrobić krótką historię, muszę utworzyć skrót do folderu przy użyciu C#. Czytałem przy użyciu IWshRuntimeLibrary. Kiedy idę, aby spróbować czegoś używając IWshRuntimeLibrary, otrzymuję różnego rodzaju błędy dwuznaczności z System.IO.File. Zakładam, że tak jest, ponieważ istnieje interfejs IWshRuntimeLibrary.File wraz z System.IO.File. Wszystko, co naprawdę udało mi się znaleźć, to artykuły na temat tworzenia skrótów do aplikacji, a nie do folderów.Tworzenie skrótu do folderu wC#

dwuznaczność Błędy bok:

  • Czy to właściwe narzędzie do wykorzystania na skróty folderu?
  • Jak mogę utworzyć skrót za pomocą tego
  • Jak mogę określić, gdzie skrót umieszczony

także wtedy, gdy próbuję utworzyć skrót do folderu, powiedzmy C:\TEMP pomocą tego:

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

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

Dostaję COMException. Zgodnie z tym, co przeczytałem, należy utworzyć skrót do folderu tymczasowej stacji dysków C i umieścić skrót w Dokumentach i ustawieniach.

+0

Możliwy duplikat: http://stackoverflow.com/questions/3391923/placing-a-shortcut-in-users- startup-folder-to-start-with-windows –

+0

Aby pozbyć się błędów niejednoznaczności, upewnij się, że chcesz użyć klasy .NET File, wywołasz System.IO.File i używasz IWShRuntimeLibrary.File podczas korzystania z innych . Ten problem zdarza mi się cały czas, jeśli chcę używać licznika czasu w klasie, która używa zarówno System.Windows.Forms, jak i System.Threading, ponieważ oba zawierają klasę Timer. Niestety nie mogę pomóc w twoim głównym problemie. –

+0

@ ademing2, doszedłem do wniosku, że to jest to, co musiałbym zrobić, ale przed dodaniem tego przed wszystkimi wywołaniami metod System.IO.File chciałem sprawdzić, czy jestem na dobrej drodze. Dzięki jednak – swabs

Odpowiedz

7

Nie zapomnij ustawić opcji Embed Interop Types na False, aby odwołać się do Interop.IWshRuntimeLibrary. Przetestowałem i działa bez otrzymania błędu.

// 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(); 
    } 

źródło: http://zayko.net/post/How-to-create-Windows-shortcut-(C).aspx

+1

Dokładnie tego, czego szukałem, również zbliżyłem się do tego rozwiązania. Po prostu nie nazwałam mojego pliku .lnk poprawnie. – swabs

1

Rozwiązanie, które wykorzystuje IShellLink na wymianę ekspertów:

Creating Shortcuts in .NET

Zapewnia zarządzanego warstwy, aby utworzyć plik i folder shorcuts.

To jest VB.NET, ale można go przekonwertować do C# za pomocą darmowych konwerterów.

3

masz go na odwrót: starasz się zrobić C:\Temp skrót do folderu C:\Documents and Settings.

następujący fragment stworzy skrót do folderu sieciowego na pulpicie:

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

Zdaję sobie sprawę, że to było na zawsze, ale próbuję użyć tej metody, aby utworzyć łącze do folderu o nazwie podobnej do 2.7.1, i kiedy próbuję kliknąć wynikowy skrót, Windows próbuje otworzyć folder jak plik. Wszelkie przemyślenia na temat tego, jak upewnić się, że system Windows wie, że jest skrótem do folderu? –