2012-10-22 23 views
7

Uzun bir hikaye kısa yapmak için, C# kullanarak bir klasöre kısayol oluşturmanız gerekir. IWshRuntimeLibrary'u kullanarak okuyorum. IWshRuntimeLibrary kullanarak bir şey denemek için gittiğimde System.IO.File ile her türlü belirsizlik hataları alıyorum. Bunun, System.IO.File ile birlikte bir IWshRuntimeLibrary.File arabirimi olduğu için varsayıyorum. Tüm gerçekten bulabildiğim, klasörlere değil, uygulamalara kısayollar oluşturmaya yönelik makaleler. kenaraBir klasöre bir kısayol oluşturma C#

Belirsizlik Hatalar:

  • bu klasör kısayolları için kullanılacak doğru araçtır mı? Ben kısayol Ayrıca

yerleştirildiği bir klasöre kısayol oluşturmak denediğimde belirtebilirim Bu nasıl

  • kullanarak bir kısayol oluşturmak nasıl
  • , bu kullanarak C:\TEMP ki:

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

    COMException alırım. Okuduğum şeye göre, C sürücüsü geçici klasörüne bir kısayol oluşturmalı ve kısayolu Belgeler ve Ayarlar bölümüne koymalısınız.

  • +0

    Olası yinelenen: http://stackoverflow.com/questions/3391923/placing-a-shortcut-in-users-

    şu pasajı masaüstünüzde bir ağ klasörüne bir kısayol oluşturacak başlat-klasör-başlangıç-pencereler- –

    +0

    Belirsizlik hatalarınızdan kurtulmak için, .NET File sınıfını kullanmak istediğinizde, System.IO.File'ı çağırdığınızda ve diğerini kullanırken IWShRuntimeLibrary.File kullandığınızdan emin olun. . Her ikisi de bir Timer sınıfı içerdiğinden, System.Windows.Forms ve System.Threading kullanan bir sınıfta bir Zamanlayıcı kullanmak istiyorsanız, bu sorun her zaman bana olur. Üzgünüm, asıl sorununla ilgili olarak yardımcı olamam. –

    +0

    @ ademing2, Ben bunu yapmak zorunda olduğumu düşündüm, ama tüm System.IO.File yöntem çağrıları önce eklemeden önce doğru yolda olup olmadığını görmek istedim. Teşekkürler – swabs

    cevap

    7

    Interop.IWshRuntimeLibrary'a başvurmak için Embed Interop Türlerini False olarak ayarlamayı unutmayın. Test ettim ve hata yapmadan çalışıyorum.

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

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

    +1

    Tam olarak aradığım şey, bu çözüme de yaklaşıyordum. Sadece kısayol dosyası için benim .lnk doğru adlandırma değildi – swabs

    1

    uzman-borsasında IShellLink kullanan bir çözüm: Dosya ve Klasör shorcuts oluşturmak için

    Creating Shortcuts in .NET

    yönetilen bir katmanı sağlar.

    Bu VB.NET'tir, ancak ücretsiz dönüştürücüler kullanarak C# 'ya dönüştürebilirsiniz.

    3

    Sen çevresinde başka bir yol var: Eğer C:\Documents and Settings klasörüne C:\Temp kısayol yapmaya çalışıyoruz.

    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

    Ben sonsuza kadar olduğunu fark, ama bu yöntemi 2.7.1 gibi bir klasöre bir link oluşturmak için kullanmaya çalışıyorum ve ben tıkladığınızda Ortaya çıkan kısayol, Windows klasörü bir dosya gibi açmaya çalışır. Windows'un bunu bildiğinden emin olmak için herhangi bir düşünce, bir klasörün kısayoludur? –

    İlgili konular