Autor |
Beitrag |
bf109g.01
Beiträge: 84
|
Verfasst: Do 16.02.12 19:57
Hallo ihr Lieben,
ich möchte mit einer Konsolenanwendung eine Verlinkung erstellen.
Diese soll testweise auf die Exe selbst zeigen und in den Autostart Ordner gelegt werden.
Es passiert allerdings einfach gar nichts.
Kein Fehlermeldung o.ä, einfach gar nichts.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| uses Windows, SysUtils, Classes, Dialogs, StdCtrls, FileCtrl, ActiveX, ShlObj, ComObj, ShellApi;
const CSIDL_STARTUP = $0007;
procedure MkLink(Name: String); begin WriteLN(Name); if not FileExists(Name+'.exe') then WriteLN('Not found.') else begin CreateLink(Name+'.exe', GetShellFolder($0007)+'\'+Name+'.lnk',''); WriteLN(Name+'.exe'); WriteLN(GetShellFolder($0007)+'\'+Name+'.lnk'); end; end;
begin MkLink('Link'); ReadLN; end. |
Warum baut man mir keine Verknüpfung?
|
|
jaenicke
Beiträge: 19274
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 16.02.12 20:49
Erstens fehlen dir eventuell die Rechte im Zielordner, zweitens hast du bei der Exe vergessen den Pfad anzugeben. Ohne kann Windows damit nichts anfangen. Nur Name+'.exe' reicht nicht, wenn in Name der Pfad fehlt.
Nebenbei:
Was hast du für komische Exe-Dateinamen? Hier Link.exe, im anderen Beitrag Copy.exe? Willst du jemanden damit ärgern indem du Systembefehle verhinderst?
|
|
bf109g.01
Beiträge: 84
|
Verfasst: Do 16.02.12 22:33
jaenicke hat folgendes geschrieben : | Erstens fehlen dir eventuell die Rechte im Zielordner, zweitens hast du bei der Exe vergessen den Pfad anzugeben. Ohne kann Windows damit nichts anfangen. Nur Name+'.exe' reicht nicht, wenn in Name der Pfad fehlt. |
Erfahrungsgemäß reicht der Dateiname aus, wenn sich die beabsichtigte Datei im gleichen Ordner wie die EXE befindet.
CreateLink(ExtractFilePath(paramstr(0))+Name+'.exe', ExtractFilePath(paramstr(0))+Name+'.lnk',''); Diese Modifikation bringt auch keine Änderung.
jaenicke hat folgendes geschrieben : | Nebenbei:
Was hast du für komische Exe-Dateinamen? Hier Link.exe, im anderen Beitrag Copy.exe? Willst du jemanden damit ärgern indem du Systembefehle verhinderst? |
Nein. Ich bin ein kleiner und schmächtiger Möchtegernprogammierer, der sich nie mehr als nur oberflächlich in Delphi eingearbeitet hat. Ich benutze gerne Konsolenprogramme, um an meinem PC diverse "Kleinigkeiten" automatisch laufen zu lassen. Bspw benutze ich ein Konsolenprogramm welches wie ein Lichtschalter versteckte Ordner sichtbar / unsichtbar macht. Andere Programme ähnlich "gewaltiger" Dimension starte ich gern mit dem Autostart, weil ich es erstens nicht besser kann und zweitens das für jeden der wenigen Nutzer, die Fan meiner Minianwendungen sind, leicht zu entfernen ist. Meine letzen Beiträge zeigen meine kläglichen Versuche, eine Verknüpfung zu einer Minianwendung automatisch in den Autostart Ordner einfügen zu lassen.
|
|
jaenicke
Beiträge: 19274
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 16.02.12 23:07
bf109g.01 hat folgendes geschrieben : | Nein. Ich bin ein kleiner und schmächtiger Möchtegernprogammierer, der sich nie mehr als nur oberflächlich in Delphi eingearbeitet hat. Ich benutze gerne Konsolenprogramme, um an meinem PC diverse "Kleinigkeiten" automatisch laufen zu lassen. |
So meinte ich das nicht.
Ich meinte, dass link und copy Befehle sind, die es bei Windows bzw. damit verbundenen Tools gibt. Wenn du jetzt eine copy.exe erstellst, wird die ggf. statt des echten Befehls aufgerufen, wenn jemand copy schreibt.
Deshalb wurde genau das oft von Virenprogrammierern oder für "Scherz"programme verwendet, insbesondere noch vor wenigen Jahren.
Es ist also absolut keine gute Idee deine Programme wie Systemprogramme oder Befehle zu nennen.
bf109g.01 hat folgendes geschrieben : | Erfahrungsgemäß reicht der Dateiname aus, wenn sich die beabsichtigte Datei im gleichen Ordner wie die EXE befindet. |
Ja, das Interface kann offenbar bei Delphi 7 nicht abgerufen werden (wie im anderen Thread geschrieben). Bei neueren Delphiversionen geht es. Ich weiß noch nicht warum.
Für diesen Beitrag haben gedankt: bf109g.01
|
|
Martok
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Fr 17.02.12 00:11
Oh, hab den Thread hier nicht gesehen. Rechnet ja keiner damit, dass zwei mal die gleiche Frage kommt Also noch mal hier, und nebenan gelöscht.
Da fehlt die Initialisierung:
CoInitialize(nil); am Programmanfang aufrufen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| begin CoInitialize(nil); mach('Test'); write('test');
ReadLN; end. |
Dass neuerdings anscheinend das komplette COM-Gedöns immer mitinitialisiert wird erklärt dann wohl auch, warum die Binaries immer größer und vom Start her langsamer werden.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
bf109g.01
Beiträge: 84
|
Verfasst: Fr 17.02.12 00:31
|
|
Martok
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Fr 17.02.12 00:47
bf109g.01 hat folgendes geschrieben : | Habe ich eingefügt. Kein Unterschied im Ergebnis... |
Du hast hier anderen Code gepostet, seh ich grade. Aber die CreateLink ist schon die gleiche wie in dem andern Thread?
Dort hat diese Änderung nämlich geholfen.
Hier ist also noch ein anderer Fehler, ich tippe wirklich mal auf den unvollständigen Pfadnamen. Was passiert, wenn du da einen vollständigen Pfad verwendest, und/oder wo steigt er beim schrittweisen Ausführen aus?
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Für diesen Beitrag haben gedankt: bf109g.01
|
|
|