Laden...

Mit shortcut.exe Verknüpfung erstellen

Erstellt von Kleba vor 16 Jahren Letzter Beitrag vor 16 Jahren 6.902 Views
K
Kleba Themenstarter:in
71 Beiträge seit 2007
vor 16 Jahren
Mit shortcut.exe Verknüpfung erstellen

Hey Leute!

ich hab da mal eine Frage 🙂

Ich habe mir die Shortcut.exe runtergeladen und in mein Projekt mit eingebunden. Damit möchte ich dann eine Verknüpfung in den Autostart auf mein Programm erstellen.

Die Befehle für Shortcut.exe sind folgende:

Shortcut.exe /F:filename /A:C|E|Q [/T:target] [/P:parameters] [/W:workingdir]
         [/R:runstyle] [/I:icon,index] [/H:hotkey] [/D:description]

 /F:filename    : Specifies the .LNK shortcut file.
 /A:action      : Defines the action to take (C=Create, E=Edit or Q=Query).
 /T:target      : Defines the target path and file name the shortcut points to.
 /P:parameters  : Defines the command-line parameters to pass to the target.
 /W:working dir : Defines the working directory the target starts with.
 /R:run style   : Defines the window state (1=Normal, 3=Max, 7=Min).
 /I:icon,index  : Defines the icon and optional index (file.exe or file.exe,0).
 /H:hotkey      : Defines the hotkey, a numeric value of the keyboard shortcut.
 /D:description : Defines the description (or comment) for the shortcut.

Mein bisheriger Code sieht so aus:


        public void SetData()
        {
            Process prShortcut = new Process();
            ProcessStartInfo prShortcutinfo = new ProcessStartInfo("shortcut.exe");
            prShortcutinfo.Arguments = String.Format("F:{0} /A:C /T:{1}", app_path, autostart_path +"/Reminder.lnk");

            if (chkAutostart.Checked == true)
            {
                try
                {
                    prShortcut = Process.Start(prShortcutinfo);
                }
                catch (Win32Exception e)
                {
                    MessageBox.Show(e.Message);
                }
            }
        }

Nun ist in dem Programm eine Checkbox. Wenn die aktiviert ist und die Einstellungen übernommen werden, soll die Verknüpfung in dem Autostart Ordner erstellt werden.

Jetzt ist halt nur die Frage warum er das nicht macht 🙂 Es wird keine Error-Message ausgegeben sondern nur wie gewollt Shortcut.exe gestartet und wieder beendet, aber keine Verknüpfung erstellt.

Habt ihr eine Idee dazu? Übergebe ich die Parameter falsch? Ein Denkanstoß wäre wünschenswert, möchte ja nicht direkt alles vorgekaut bekommen 🙂

Danke im Voraus
KLeba

P.S.: Ja, ich habe schon nach Lösungen gesucht, aber leider dazu nichts gefunden und ich dachte bevor ich noch ewig und 3 Tage nach einem Fehler suche, frage ich lieber einen Dritten. Manchmal hab ich auch einfach nur ein Brett vor Kopf und sehe die einfachsten Sachen nicht.

Alle sagten es geht nicht. Da kam einer der wusste das nicht und tat es.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Kleba,

du solltest dir mal angucken, was shortcut.exe für Ausgaben macht. Dazu kannst du statt shortcut.exe ... einfach cmd.exe /k shortcut.exe ... starten.

Hm, wenn ich jetzt den Code so ansehe, dann sind deine Parameter bei String.Format doch vertauscht.

herbivore

K
Kleba Themenstarter:in
71 Beiträge seit 2007
vor 16 Jahren

Hm, wenn ich jetzt den Code so ansehe, dann sind deine Parameter bei String.Format doch vertauscht.

Oha - du hast recht (wen wunderts?) 🙂 Danke für den Hinweis, werd mal schauen, dass das klappt.

Melde mich dann wieder.

Alle sagten es geht nicht. Da kam einer der wusste das nicht und tat es.

K
Kleba Themenstarter:in
71 Beiträge seit 2007
vor 16 Jahren

mir ist gerade noch was aufgefallen.

autostart_path ist bei mir
string autostart_path = Environment.SpecialFolder.Startup.ToString();

aber wenn ich mir den String anzeigen lasse, steht da nur "Startup" drin und nicht der Pfad zu dem Ordner... wieso? Ich dachte wenn ich das so angebe, ist der String gleich der Pfadangabe des Autostartordners?!

Alle sagten es geht nicht. Da kam einer der wusste das nicht und tat es.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Kleba,

Environment.SpecialFolder ist ein Enum. Da kann bei ToString ja nichts anderes herauskommen als der Name des Enum-Elements.

Du willst: Environment.GetFolderPath

herbivore

K
Kleba Themenstarter:in
71 Beiträge seit 2007
vor 16 Jahren

So,

hab das jetzt nochmal abgeändert und bekomme jetzt auch die richtige Pfadangabe. Das Problem ist jetzt nur, dass shortcut.exe mir sagt, die PFandangabe wäre invalid (weil leerzeichen im PFad vorhanden sind z.B. bei "\Dokumente und Einstellungen")

Kann ich die Leerzeichen irgendwie ersetzen oder einzelen Teile/komplett in Anführungsstriche ("") setzen? In der Hilfe dazu steht, dass ich die Anführungszeichen verwenden soll, aber weiss nicht wie ich das in

prShortcutinfo.Arguments = String.Format("F:{0} /A:C /T:{1}", autostart_path +"\\Reminder.lnk", app_path);

den String bekomme.

Hat dazu jemand eine Idee? Oder ist das nicht machbar? Das Problem ist ja, dass Windows keine Standardvariable für den Autostart-Ordner hat, sonst könnnt ich ja einfach diese übergeben und es würde ohne probleme gehen... aber so?

Ratloser Gruß
Kleba

Alle sagten es geht nicht. Da kam einer der wusste das nicht und tat es.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Kleba,

""F:{0}" /A:C "/T:{1}""

herbivore

K
Kleba Themenstarter:in
71 Beiträge seit 2007
vor 16 Jahren

Also ich bisn nochmal...

sorry, falls es langsam nervt, aber ich verstehe nicht, was los ist. Der gibt immer an

The parameter "Pfandangabe" is invalid

The syntax of the command is incorrect.

Hier nochmal der Text aus der Readme, ich kann beim besten Willen kein Syntaxfehler entdecken...

Shortcut [Version 1.11]

Creates, modifies or queries Windows shell links (shortcuts)

The syntax of this command is:

Shortcut.exe /F:filename /A:C|E|Q [/T:target] [/P:parameters] [/W:workingdir]
[/R:runstyle] [/I:icon,index] [/H:hotkey] [/D:description]

/F:filename : Specifies the .LNK shortcut file.
/A:action : Defines the action to take (C=Create, E=Edit or Q=Query).
/T:target : Defines the target path and file name the shortcut points to.
/P:parameters : Defines the command-line parameters to pass to the target.
/W:working dir : Defines the working directory the target starts with.
/R:run style : Defines the window state (1=Normal, 3=Max, 7=Min).
/I:icon,index : Defines the icon and optional index (file.exe or file.exe,0).
/H:hotkey : Defines the hotkey, a numeric value of the keyboard shortcut.
/D:description : Defines the description (or comment) for the shortcut.

Notes:

  • Any argument that contains spaces must be enclosed in "double quotes".
  • If Query is specified (/A:Q), all arguments except /F: are ignored.
  • To find the numeric hotkey value, use Explorer to set a hotkey and then /A:Q
  • To prevent an environment variable from being expanded until the shortcut
    is launched, use the ^ carat escape character like this: %WINDIR%

Examples:
/f:"%ALLUSERSPROFILE%\Start Menu\Programs\My App.lnk" /a:q
/f:"%USERPROFILE%\Desktop\Notepad.lnk" /a:c /t:%WINDIR%\Notepad.exe /h:846
/f:"%USERPROFILE%\Desktop\Notepad.lnk" /a:e /p:C:\Setup.log /r:3

Hier nochmal mein (relevanter) Code:

string autostart_path = Environment.GetFolderPath(Environment.SpecialFolder.Startup);

        public void SetData()
        {
            Process prShortcut = new Process();
            ProcessStartInfo prShortcutinfo = new ProcessStartInfo("shortcut.exe");
            prShortcutinfo.Arguments = String.Format("\"F:{0}\" /A:C \"/T:{1}\"", autostart_path + "\\Reminder.lnk", app_path);
           // Nur um zu gucken ob der Pfad richtig ausgegeben wird
            string bla = prShortcutinfo.Arguments.ToString();
            MessageBox.Show(bla);
            Clipboard.SetDataObject(bla);
            if (chkAutostart.Checked == true)
            {
                try
                {
                    prShortcut = Process.Start(prShortcutinfo);
                }
                catch (Win32Exception e)
                {
                    MessageBox.Show(e.Message);
                }
            }
        }

Alle sagten es geht nicht. Da kam einer der wusste das nicht und tat es.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Kleba,

/F nicht F

herbivore