Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Verknüpfung (*.lnk) erstellen
Fabian
myCSharp.de - Member

Avatar #avatar-1590.jpg


Dabei seit:
Beiträge: 1.985
Herkunft: Dortmund

Themenstarter:

Verknüpfung (*.lnk) erstellen

beantworten | zitieren | melden

Nabend Community,

ich möchte jetzt gerne mittels C# eine Verknüpfung zu einem Programm erstellen. Ich habe gerade etwas länger gegoogelt aber leider noch nichts brauchbares gefunden.

Hat sich damit jemand schon mal beschäftigt? Es geht um das Erstellen, Bearbeiten und Löschen der *.lnk-Dateien.


Gruß,
Fabian
"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de
private Nachricht | Beiträge des Benutzers
Kostas
myCSharp.de - Member



Dabei seit:
Beiträge: 597

beantworten | zitieren | melden

Hi Fabian,

ich hoffe ich werde jetzt nicht gesteinigt wenn ich das jetzt
eifach veröffentliche.
Ich habe das Buch "Das C# Codebook" ISBN:3-8273-2050-X
von Addison-Wesley. Darin ich ein Beispiel wie Verknüpfungen
angelegt werden können.
Das Buch ist sein Geld wert.

Gruß Kostas
Attachments
private Nachricht | Beiträge des Benutzers
Fabian
myCSharp.de - Member

Avatar #avatar-1590.jpg


Dabei seit:
Beiträge: 1.985
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Hallo Kostas,

danke für das Beispiel. Ist ja doch viel komplexer, als ich dachte. Das C# Codebook scheint ja richtig gut zu sein, mit 60 Euro aber doch recht teuer :(.


Gruß,
Fabian
"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de
private Nachricht | Beiträge des Benutzers
Kostas
myCSharp.de - Member



Dabei seit:
Beiträge: 597

beantworten | zitieren | melden

ja das ist schon teuer. Sicherlich gibt es im Internet noch ein paar Quellen
wo so etwas stehen könnte. Ich habe aus diesem Buch schon manschen
Code brauchen können. Das ist die Investion schon gerechtfertigt.

Es ist sicherlich Altmodisch aber ich halte lieber ein Buch ein der Hand
als ein PDF. :-)

Gruß Kostas
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Fabian,
Zitat
Ist ja doch viel komplexer, als ich dachte.
einfacher geht es mit Process.Start von shortcut.exe und den entsprechenden Parametern.

herbivore
private Nachricht | Beiträge des Benutzers
ZiMD
myCSharp.de - Member

Avatar #avatar-1977.png


Dabei seit:
Beiträge: 564

beantworten | zitieren | melden

und wo bekommt man die shortcut.exe her?
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1.739

beantworten | zitieren | melden

Google: Shortcut.exe 1.er Treffer
http://www.winfaq.de/faq_html/tip0338.htm

"SHORTCUT.EXE finden Sie auf der Windows CD im Verzeichnis ADMIN\APPTOOLS\ENVVARS"
private Nachricht | Beiträge des Benutzers
ZiMD
myCSharp.de - Member

Avatar #avatar-1977.png


Dabei seit:
Beiträge: 564

beantworten | zitieren | melden

auf meiner xp pro nicht
private Nachricht | Beiträge des Benutzers
dr4g0n76
myCSharp.de - Experte

Avatar #avatar-1768.jpg


Dabei seit:
Beiträge: 2.921
Herkunft: Deutschland

@all

beantworten | zitieren | melden

@all:

Viel einfacher geht das mit folgendem Code (Auszug aus MSDN):

Private Declare Function CreateShellLink _
Lib "vb6stkit.dll" _
Alias "fCreateShellLink" _
( _
ByVal lpstrFolderName As String, _
ByVal lpstrLinkName As String, _
ByVal lpstrLinkPath As String, _
ByVal lpstrLinkArguments As String, _
ByVal fPrivate As Long, _
ByVal sParent As String _
) _
As Long

Erklärung der Parameter:
lpstrFolderName
• Gibt den relativen Pfad (ausgehend von sParent) an,

wo die Verknüpfung angelegt werden soll

• lpstrLinkName
• Gibt den Text an, der unter dem Icon stehen soll
lpstrLinkPath
• Gibt den Pfad und den Namen der Datei an, auf die

die Verknüpfung zeigen soll

• lpstrLinkArguments
• Gibt die Kommandozeilenparameter an, die angewandt

werden sollen

• fPrivate
• Gibt an, ob die Verknüpfung für alle oder nur den

aktuellen User sichtbar sein soll

• sParent
• Gibt den Ausgangsordner für die Operation an, von

dem aus lpstrFolderName arbeitet

Beispiel für die Verwendung:

Dim lRet As Long
Dim sFolderName As String
Dim sLinkName As String
Dim sLinkPath As String
Dim sLinkArgs As String
Dim fPrivate As Boolean
Dim sParent As String

sLinkName = "Mein Taschenrechner"
sLinkPath = "C:\Winnt\System32\Calc.exe"
sLinkArgs = ""
sParent = "$(Programs)"

' ----------------------------------------------------------
' Verknüpfung auf dem Desktop erstellen:
' ----------------------------------------------------------
sFolderName = "..\..\desktop"
fPrivate = True
lRet = CreateShellLink(sFolderName, sLinkName, sLinkPath, _

sLinkArgs, fPrivate, sParent)

' ----------------------------------------------------------
' Verknüpfung unter Start - Programme (lokal) erstellen:
' ----------------------------------------------------------
sFolderName = "."
fPrivate = True
lRet = CreateShellLink(sFolderName, sLinkName, sLinkPath, _

sLinkArgs, fPrivate, sParent)

' ----------------------------------------------------------
' Verknüpfung unter Start - Programme (Alle User) erstellen:
' ----------------------------------------------------------
sFolderName = "."
fPrivate = False
lRet = CreateShellLink(sFolderName, sLinkName, sLinkPath, _

sLinkArgs, fPrivate, sParent)

' ----------------------------------------------------------
' Verknüpfung unter Start - Programme -AutoStart erstellen:
' ----------------------------------------------------------
sFolderName = ".\AutoStart"
fPrivate = True
lRet = CreateShellLink(sFolderName, sLinkName, sLinkPath, _

sLinkArgs, fPrivate, sParent)
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1.739

beantworten | zitieren | melden

"vb6stkit.dll", dazu müsste man die Dll dann mit ausliefern(Setup, oder per Skript registrieren/oder auf dem Zielsystem vorraussetzen). Die Dll gehört zum Deploymentwizard(Packagemanager) von VS 6.
Wie das Beispiel auch(VB 6.0 - dllimport)

Das Beispiel ist wirklich einfach, einfach ist aber auch die Klasse aus dem C# - Codebook(die ist ja schon so gebrauchsfähig und man sieht was gemacht wird). Von der Verwendung her könnte mans gleich betrachten, in Sachen Einfacheit.
Bei Verwendung der vbstkit.dll muss man halt sicher stellen, dass sich das Ding wohlregistriert irgendwo auf dem System befindet.
private Nachricht | Beiträge des Benutzers
dr4g0n76
myCSharp.de - Experte

Avatar #avatar-1768.jpg


Dabei seit:
Beiträge: 2.921
Herkunft: Deutschland

beantworten | zitieren | melden

Klar, davon ging ich aus. Das ist auch an der Endung der DLL zu sehen, aber ich gebe zu ich habe nicht überprüft, ob die Datei dabei ist, bin aber auch davon ausgegangen.
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1.739

beantworten | zitieren | melden

"vb6stkit.dll", ist nicht vorhanden, es sei denn nach der ersten Installation eines VB6-Programms das auch den Packagemanager verwendet(gibt ja bessere Alternativen). Standard bei XP/2000 sind nur die Runtime-dlls für VB5 und 6.
Man muss sich also kümmern, dass das Ding drauf ist/kommt, wenn man die DLL verwenden möchte.
private Nachricht | Beiträge des Benutzers
dr4g0n76
myCSharp.de - Experte

Avatar #avatar-1768.jpg


Dabei seit:
Beiträge: 2.921
Herkunft: Deutschland

beantworten | zitieren | melden

dann eben so über:

rundll32.exe appwiz.cpl,NewLinkHere <Verzeichnis>
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1.739

beantworten | zitieren | melden

gute Lösung, die "rundll32.exe" kann man als gegeben nehmen und das funktioniert in jeder <Sprache¦Script>
private Nachricht | Beiträge des Benutzers
gobbo
myCSharp.de - Member

Avatar #avatar-2732.jpg


Dabei seit:
Beiträge: 80
Herkunft: Hamburg

100. Download

beantworten | zitieren | melden

HAHA! 8)
Ich hab den 100. Download...
Ich gratuliere mir! :tongue:
private Nachricht | Beiträge des Benutzers
webstarg
myCSharp.de - Member



Dabei seit:
Beiträge: 558
Herkunft: München, Deutschland

beantworten | zitieren | melden

Ich mache Verknüpfungen immer mit Hilfe der dll IWshShortcut.

Mit Google findet man Erklärungen dazu.

grüße
webstarg
private Nachricht | Beiträge des Benutzers
gobbo
myCSharp.de - Member

Avatar #avatar-2732.jpg


Dabei seit:
Beiträge: 80
Herkunft: Hamburg

beantworten | zitieren | melden

Ich hab sowas auch gesucht und gefunden:


using IWshRuntimeLibrary;

//Noch n bisschen Code

WshShell wsh = new IWshRuntimeLibrary.WshShell();
WshShortcut sc = (WshShortcut)wsh.CreateShortcut(desination);
sc.TargetPath = shortcutLocation;
sc.IconLocation = resPath + "shortcutIcon";
sc.Save();
private Nachricht | Beiträge des Benutzers
webstarg
myCSharp.de - Member



Dabei seit:
Beiträge: 558
Herkunft: München, Deutschland

beantworten | zitieren | melden

Ja, genau.

Benötigt wird noch eine (COM-)Referenz auf Windows Script Host Object Model.

(PS: Artikel auf Codeproject)

mfg
webstarg
private Nachricht | Beiträge des Benutzers
mipa_acc
myCSharp.de - Member



Dabei seit:
Beiträge: 318

beantworten | zitieren | melden

Hallo,

ich bekomme immer eine Exception in der Zeile:

WshShortcut sc = (WshShortcut)wsh.CreateShortcut(desination);

Ich habe als Pfad schon alles probiert was mir so eingefallen ist, z.B


@"C:\TestDatei.xml"

"C:\\TestDatei.xml"

Probiert. Weilder bekomme ich immer folgenden Fehler: Ausnahmefehler aufgetreten. (Ausnahme von HRESULT: 0x80020009 (DISP_E_EXCEPTION))


Bitte um Hilfe.

Vielen Dank im Vorraus

MFG
private Nachricht | Beiträge des Benutzers
webstarg
myCSharp.de - Member



Dabei seit:
Beiträge: 558
Herkunft: München, Deutschland

beantworten | zitieren | melden

Ich sehe da keinen Fehler, es müsste also schon funktionieren.

Was sein könnte: Gibt es diese Datei nicht?

webstarg
private Nachricht | Beiträge des Benutzers
banzai
myCSharp.de - Member

Avatar #avatar-2501.jpg


Dabei seit:
Beiträge: 57
Herkunft: Deutschland / NRW

beantworten | zitieren | melden

Gott zum Grusse !!!

DISP_E_EXCEPTION ist eine generische Fehlermeldung des COM-Systems, definiert in winerror.h und hat so ungefähr die Aussagekraft von "Da ist wohl was schiefgegangen ...".
Ich persönlich habe diesen Fehler schon erlebt bei einem COM-Versionskonflikt in Bezug auf scrrun.dll (MS Scripting) und einer fehlgeschlagenen DB-Anmeldung per ODBC (kein Scherz - das Passwort stimmte nicht).
Wenn ich raten müsste, würde ich auf einen Versionskonflikt tippen. Im Laufe der Win-Versionen / SPs / sonstiger Patches hat MS sehr oft am Scripting Host rumgeschraubt. Falls das der Grund ist, sollte Erzeugung per Late Binding helfen.

Frickelistas venceremos !!!
2 + 2 = 5 for large values of 2
private Nachricht | Beiträge des Benutzers
Mai08
myCSharp.de - Member



Dabei seit:
Beiträge: 11
Herkunft: Görlitz

beantworten | zitieren | melden

Hallo liebe Leute,

ich nutze auch das Windows Scripting Host zum erstellen einer Verknüpfung.
Jedoch kann ich es überhaupt nicht leiden, ständig die DLL's mit zu schleppen.
Also habe ich die Verknüpfung zur DLL über LateBinding realisiert.
Es sind hier also keinerlei Com-Verweise nötig:

// Erstellen einer Verknüpfung
string PfadVK = "...", NameVK = "...";
string OriginalDateiMitPfad = "...";
object oWS = Activator.CreateInstance(Type.GetTypeFromProgID("WScript.Shell"));                    
object oLink = oWS.GetType().InvokeMember("CreateShortcut", BindingFlags.InvokeMethod, null, oWS, new object[] { PfadVK + NameVK + ".lnk" });
oLink.GetType().InvokeMember("TargetPath", BindingFlags.SetProperty, null, oLink, new object[] { OriginalDateiMitPfad });
oLink.GetType().InvokeMember("Save", BindingFlags.InvokeMethod, null, oLink, new object[] { });

Viele Grüße
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Mai08 am .
private Nachricht | Beiträge des Benutzers