Autor Beitrag
bf109g.01
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: 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.

ausblenden 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
  { TODO -oUser -cConsole Main : Hier Code einfügen }
  MkLink('Link');
  ReadLN;
end.

Warum baut man mir keine Verknüpfung?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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? :roll:
bf109g.01 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Do 16.02.12 22:33 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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? :roll:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 16.02.12 23:07 
user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
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. :nixweiss:

Für diesen Beitrag haben gedankt: bf109g.01
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
begin
  CoInitialize(nil);
  { TODO -oUser -cConsole Main : Hier Code einfügen }
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Fr 17.02.12 00:31 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Es ist also absolut keine gute Idee deine Programme wie Systemprogramme oder Befehle zu nennen.
Das... ähm... wusste ich nicht... :oops:

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
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.
Habe ich eingefügt. Kein Unterschied im Ergebnis... :(
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 17.02.12 00:47 
user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
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