Das folgende Beispiel läßt sich am besten in Visual C# 2009 nachstellen. Die kostenfreie Express-edition sollte hierfür reichen.

leeres Windows-Forms-Projekt offen?

Schritt 1

Los gehts…

Also zunächst benötigt unser Projekt die Windows-Scripting-Host OCX-Datei, dazu im Projektmappen-Explorer auf "Verweise" oder auf das Projekt mit der rechten Maustaste klicken, auf "Verweis hinzufügen…", unter "COM" findest du dann das "Windows Script Host Object Model"

c__tip_2009-04-14_pic1_470.png

Schritt 2

Um nun damit arbeiten zu können, muss es mit der "using" direktive eingebaut werden, damit die Klassen des WSH zur verfügung stehen.

[infol=100%;]in der Regel werden diese in der folgenden Form eingebunden:

using IWshRuntimeLibrary;

ein WSH-Objekt würde man nun so erstellen:

WshShell wsho = new IWshRuntimeLibrary.WshShell

[/infol]

Es gibt jedoch 3 Gründe warum ich das nun anders mache:

    [*]wir benötigen von den vielen Klassen des WSH nur WshShell und IWshShortcut[/*]
    [*]Wird System.IO auch eingebunden, ist die Klasse File nicht mehr einmalig und muss immer komplett mit System.IO.File angegeben werden[/*]
    [*]Ich bin Schreibfaul denn wir nennen die Klassen wie wir möchten.[/*]

[infol=100%;]Die Using-Direktive kann Klassen einbinden und gleichzeitig benennen.

using WSShell = IWshRuntimeLibrary.WshShell;
using WSShortcut = IWshRuntimeLibrary.IWshShortcut;

Da es normal die Klassennamen WSShell und WSShortcut nicht gibt, nehme ich diese Sinnvollerweise. Unter den (fast) frei wählbaren Klassennamen links vom Gleichzeichen ist direkt die Unterklasse WshShell und IWshShortcut vom IWshRuntimeLibrary im Projekt verfügbar. Die anderen Klassen aus IWshRuntimeLibrary implementiere ich hier extra nicht.

Nun kann man ein WSShell-Objekt erstellen, dieses bietet die funktion "CreateShortcut(string LNK-Dateiname)" zum ersellen eines Link-Objekts.
Die Datei wird nicht sofort erstellt sondern erst wenn dann das die funktion "Save()" des Link-Objekts ausgeführt wird.

WSShell wsho = new WSShell();
WSShortcut sc = (WSShortcut)wsho.CreateShortcut("knüpf.lnk");

Zu beachten gild das "CreateShortcut" als Rückgabetyp "Object" hat, also muss die Art was zurückgegeben wird nochmal in runden Klammern als Typenumwandlung angegeben werden.
das nun fertige sc – Objekt bietet also die Möglichkeit nun die Parameter einer Verknüpfung zu setzen, laden oder auch speichern der angegebenen LNK-Datei.[/infol]

So siehts dann fertig aus

Wenn du in deinem leeren Projekt einen Button erstellst, ihn "Knopf_Linkerstellen" nennst und dann das Ereigniss "Click" festlegst, kannst du nun für das Programm folgenden Code benutzen. (Überflüssige Using-direktiven kann man rausnehmen um die Compelierung zu beschleunigen und auch weniger Probleme auf anderen Systemen wie Windows 2000 zu haben)

using System;
using System.Windows.Forms;
using WSShell = IWshRuntimeLibrary.WshShell;
using WSShortcut = IWshRuntimeLibrary.IWshShortcut;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Knopf_Linkerstellen_Click
(object sender, EventArgs e)
{
string LNKF = System.Environment.GetFolderPath
(System.Environment.SpecialFolder.DesktopDirectory)
+ "\\" + Application.ProductName + ".lnk";
WSShell wsho = new WSShell();
WSShortcut sc = (WSShortcut)wsho.CreateShortcut(LNKF);
sc.TargetPath = Application.ExecutablePath;
sc.Description = Application.ProductName + " ausführen";
sc.WorkingDirectory = Application.ProductName;
sc.Save();

}
}
}

Welche Methoden und Eigenschafen noch möglich sind sollte C# dir Vorschlagen wenn du in der leeren Zeile unter sc.Save() mal "sc." eingibst.