C# Verknüpfungen

08/27/2010 22:23 FizzeBu#1
Hallo,

ich habe mit Hilfe von ein paar pvpers ein C# Programm geschrieben.
Ich möchte jetzt noch Buttons einbauen, die eine Verknüpfung zum Desktop, bzw. ins Autostartmenu ertellen. Ich habe auch eine Methode gefunden: [Only registered and activated users can see links. Click Here To Register...] Mein Problem ist nur. dass ich das Programm nicht installiere, und somit nicht wissen kann wo es gespeichert ist. Also habe ich Application.ExecutablePath benutzen wollen. in dem file/ wird das aber nicht erkannt:(
Kennt jemand eine ander Möglichkeit Verknüpfunge zu ertellen?
08/28/2010 00:30 bFighter#2
Also wenn man die zweite Methode aus deinem Link nimmt, funktioniert alles.

Hab die hier genommen:
Quote:
private void appShortcutToDesktop(string linkName)
{
string deskDir = Environment.GetFolderPath(Environment.SpecialFolde r.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();
}
}
Bei Win7/Vista Programm als Admin ausführen.
08/28/2010 12:34 Noisuf-X#3
Quote:
Originally Posted by bFighter View Post
Also wenn man die zweite Methode aus deinem Link nimmt, funktioniert alles.

Hab die hier genommen:


Bei Win7/Vista Programm als Admin ausführen.
wieso Admin rechte in seinem lokalen desktop pfad braucht man kein admin rechte

@Thema
Ich würde dir eher raten eine Setup datei zu erstellen, damit kommst du weiter.
Da da aber hier so einen post sprengen würde hier ein TUT
[Only registered and activated users can see links. Click Here To Register...] oder du googlest wie man mit visual studio ein setup projekt erstellt
08/28/2010 13:50 FizzeBu#4
hmm, eigentlich wollte ich kein Setup, aber ich werde es wohl so machen müssen. Ich wollte eigentlich wissen wie ich Application.ExecutablePath mit diesem file/// Befehl verbinden kann, da ich ja nicht weiß wie der Pfad zu meinem Programm ist...
Aber trozdem Danke:D
08/28/2010 21:29 Noisuf-X#5
Quote:
Originally Posted by FizzeBu View Post
hmm, eigentlich wollte ich kein Setup, aber ich werde es wohl so machen müssen. Ich wollte eigentlich wissen wie ich Application.ExecutablePath mit diesem file/// Befehl verbinden kann, da ich ja nicht weiß wie der Pfad zu meinem Programm ist...
Aber trozdem Danke:D
also dein Problem ist das Application.ExecutablePath einen Windowspfad zurück gibt, und die besitzen nunmal "\" als Verzeichnisstrenner.

file:// ist eine URI und besitzt "/" als verzeichnisstrenner.

Problemlösung ist
Quote:
String.Format(@"file://{0}", Application.ExecutablePath.Replace(@"\", "/"));
zur Erklärung:
1. .Replace(string1, string2), erstetzt in dem ausgangs string jeden string1 mit string 2.
2. wenn man vor "" eine @ schreibt muss man die standart-string-regeln nicht beachten also das \\ im string dann \ bei der ausgabe sind, d.h. man hat zb so die möglichkeit die pfad unter windows normal zuschreiben
@"C:\so\gefällt\mir\das.exe" und "C:\\so\\gefällt\\mir\\das.exe" sind in identisch.

P.S. händisch würde eine Desktopverknüpfung aber anderst erstellen, weil das oben sind nur INternetShortcuts die einfach auf einen lokalen pfad verweisen, aber keine richtigen Windowsverknüpfungen

Quote:
WshShell shell = new WshShell(); // Erzeugt eine native Windowsshell
IWshShortcut link = (IWshShortcut)shell.CreateShortcut(String.Format(@ "{0}\SoWieDuDeineVerknüpfungNenenWillst.lnk", Environment.GetFolderPath(Environment.SpecialFolde r.DesktopDirectory))); // Erzeugt eine Verknüpfung zu dem Pfad den man angibt
link.TargetPath = String.Format(@"{0}\abc.exe", Application.ExecutablePath); // das ist die Eigenschaft von der Verknüpfung der den Zielpfad angibt
link.Save(); // zum schluss noch speichern
Du musst aber bei den Refrences noch den "Windows Script Host Model" verweisen.

Optional:
Quote:
link.IconLocation = PfadZumIcon; // kann man noch ein Icon setzen
und noch ein Codeproject [Only registered and activated users can see links. Click Here To Register...]
08/28/2010 23:57 FizzeBu#6
Woow, danke! Ich habe heut keine Zeit mehr das zu testen, aber es sieht sehr vielversprechend aus! Danke:D Ich schreibe dann morgen abend ob es funktioniert hat
08/29/2010 15:52 FizzeBu#7
Also, es hat eigentlich super geklappt, man muss noch using IWshRuntimeLibrary; hinzufügen, dann ist der Code vollständig;D

Ich habe jetzt aber noch ein paar Fehler Meldungen bekommen und zwar alle in dieser Zeile:

Code:
            IWshShortcut link = (IWshShortcut)shell.CreateShortcut(String.Format(@ "{0}\Pennergame Spender.lnk", Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory))); // Erzeugt eine Verknüpfung zu dem Pfad den man angibt
Wenn ich ein ; einfüge verlangt er ein ) dann auch noch ein ( und dann wieder ein ; D:

Könntes tdu die Zeilen nochmal checken bitte ich kriegs nämlich alleine nicht gebacken D:
08/29/2010 18:24 Noisuf-X#8
Quote:
Originally Posted by FizzeBu View Post
Also, es hat eigentlich super geklappt, man muss noch using IWshRuntimeLibrary; hinzufügen, dann ist der Code vollständig;D

Ich habe jetzt aber noch ein paar Fehler Meldungen bekommen und zwar alle in dieser Zeile:

Code:
            IWshShortcut link = (IWshShortcut)shell.CreateShortcut(String.Format(@ "{0}\Pennergame Spender.lnk", Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory))); // Erzeugt eine Verknüpfung zu dem Pfad den man angibt
Wenn ich ein ; einfüge verlangt er ein ) dann auch noch ein ( und dann wieder ein ; D:

Könntes tdu die Zeilen nochmal checken bitte ich kriegs nämlich alleine nicht gebacken D:
ja ok namespace usings lass ich eigentlich immer weg, also das kann man schon selberraus finden. Visual Studio hilft einem da ja auch, wenn man den Verweis drinne muss man bloß auf den Klassenamen gehen und STRG+. drücken dann bietet es einem den namespace an
bei der Zeile mit dem Fehler muss das @ muss immer direkt an der " stehen also @", muss bei kopieren aus visual studio dazu gekommen sein
und was ich gerade noch sehen
Quote:
link.TargetPath = Application.ExecutablePath;
muss so da Application.ExecutablePath ja schon die exe zurück gibt und nich nur den Ordner
08/30/2010 08:02 FizzeBu#9
Danke, man muss nur die Leerstelle nach dem @ wegmachen, dann funktioniert es einwandfrei;D

Noch ne frage: Wie kann ich eine int Variable konvertieren, soass ich sie bei if (variable = 100) einfügen kann?
08/30/2010 09:21 Noisuf-X#10
Quote:
Originally Posted by FizzeBu View Post
Danke, man muss nur die Leerstelle nach dem @ wegmachen, dann funktioniert es einwandfrei;D

Noch ne frage: Wie kann ich eine int Variable konvertieren, soass ich sie bei if (variable == 100) einfügen kann?
Das ist eigentlich Grundlagenwissen, "=" ist eine Zuweisung "==" ist ein Vergleichsoperator.
Müsste eigentlich auch in der Fehlernachricht stehen
08/30/2010 09:32 FizzeBu#11
Danke ;D