71 votes

Création d'un raccourci d'application dans un répertoire

Comment créer un raccourci d'application (fichier .lnk) en C# ou en utilisant le cadre .NET ?

Le résultat serait un fichier .lnk vers l'application ou l'URL spécifiée.

61voto

Chasler Points 2158

Ce n'est pas aussi simple que je l'aurais souhaité, mais il y a une grande classe d'appel. ShellLink.cs à l'adresse vbAccelerator

Ce code utilise l'interopérabilité, mais ne repose pas sur WSH.

En utilisant cette classe, le code pour créer le raccourci est :

private static void configStep_addShortcutToStartupGroup()
{
using (ShellLink shortcut = new ShellLink())
{
    shortcut.Target = Application.ExecutablePath;
    shortcut.WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath);
    shortcut.Description = "My Shorcut Name Here";
    shortcut.DisplayMode = ShellLink.LinkDisplayMode.edmNormal;
    shortcut.Save(STARTUP_SHORTCUT_FILEPATH);
}
}

60voto

IllidanS4 Points 811

Agréable et propre. ( .NET 4.0 )

Type t = Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8")); //Windows Script Host Shell Object
dynamic shell = Activator.CreateInstance(t);
try{
    var lnk = shell.CreateShortcut("sc.lnk");
    try{
        lnk.TargetPath = @"C:\something";
        lnk.IconLocation = "shell32.dll, 1";
        lnk.Save();
    }finally{
        Marshal.FinalReleaseComObject(lnk);
    }
}finally{
    Marshal.FinalReleaseComObject(shell);
}

C'est tout, aucun code supplémentaire n'est nécessaire. CreateShortcut peut même charger un raccourci à partir d'un fichier, de sorte que des propriétés telles que TargetPath retourner les informations existantes. Propriétés des objets de raccourci .

Cette méthode est également possible pour les versions de .NET qui ne prennent pas en charge les types dynamiques. ( .NET 3.5 )

Type t = Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8")); //Windows Script Host Shell Object
object shell = Activator.CreateInstance(t);
try{
    object lnk = t.InvokeMember("CreateShortcut", BindingFlags.InvokeMethod, null, shell, new object[]{"sc.lnk"});
    try{
        t.InvokeMember("TargetPath", BindingFlags.SetProperty, null, lnk, new object[]{@"C:\whatever"});
        t.InvokeMember("IconLocation", BindingFlags.SetProperty, null, lnk, new object[]{"shell32.dll, 5"});
        t.InvokeMember("Save", BindingFlags.InvokeMethod, null, lnk, null);
    }finally{
        Marshal.FinalReleaseComObject(lnk);
    }
}finally{
    Marshal.FinalReleaseComObject(shell);
}

13voto

Anuraj Points 6835

J'ai trouvé quelque chose comme ça :

private void appShortcutToDesktop(string linkName)
{
    string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);

    using (StreamWriter writer = new StreamWriter(deskDir + "\\" + linkName + ".url"))
    {
        string app = System.Reflection.Assembly.GetExecutingAssembly().Location;
        writer.WriteLine("[InternetShortcut]");
        writer.WriteLine("URL=file:///" + app);
        writer.WriteLine("IconIndex=0");
        string icon = app.Replace('\\', '/');
        writer.WriteLine("IconFile=" + icon);
        writer.Flush();
    }
}

Code original à article "url-link-to-desktop" de sorrowman

4voto

Kieron Points 10261

1voto

AZ_ Points 7127

Télécharger la bibliothèque IWshRuntimeLibrary

Vous devez également importer la bibliothèque COM IWshRuntimeLibrary . Cliquez avec le bouton droit de la souris sur votre projet -> ajouter une référence -> COM -> IWshRuntimeLibrary -> ajouter, puis utilisez l'extrait de code suivant.

private void createShortcutOnDesktop(String executablePath)
        {
            // Create a new instance of WshShellClass

            WshShell lib = new WshShellClass();
            // Create the shortcut

            IWshRuntimeLibrary.IWshShortcut MyShortcut;

            // Choose the path for the shortcut
            string deskDir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            MyShortcut = (IWshRuntimeLibrary.IWshShortcut)lib.CreateShortcut(@deskDir+"\\AZ.lnk");

            // Where the shortcut should point to

            //MyShortcut.TargetPath = Application.ExecutablePath;
            MyShortcut.TargetPath = @executablePath;

            // Description for the shortcut

            MyShortcut.Description = "Launch AZ Client";

            StreamWriter writer = new StreamWriter(@"D:\AZ\logo.ico");
            Properties.Resources.system.Save(writer.BaseStream);
            writer.Flush();
            writer.Close();
            // Location for the shortcut's icon           

            MyShortcut.IconLocation = @"D:\AZ\logo.ico";

            // Create the shortcut at the given path

            MyShortcut.Save();

        }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X