Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Programmstarts IDE vs. Explorer


delphi10 - Do 11.03.10 14:41
Titel: Programmstarts IDE vs. Explorer
Hallo
Kann ein Programm feststellen, ob es aus der IDE oder mittels Doppelclick im Explorer gestartet wurde? Ich habe jetzt folgende Lösung eingebaut: In der IDE setze ich einen Parameter, der im Programm abgefragt wird. Dieser Parameter ist ja nur beim Start aus der IDE vorhanden, beim Start aus dem Explorer nicht. Funktioniert, aber es scheint mir nicht besonders elegant zu sein. Ein Compiler-Schalter o.ä. wäre mir lieber.
Hintergrund: Ich habe im Prog. einen Selfcheck implementiert, der aber leider bei einem Start aus der IDE (durchaus berechtigte) exceptions ohne Ende produziert. Gut, ich könnte den Check auch auskommentieren und zum Release wieder einbauen, ich will aber sichergehen, dass ich es nicht vergesse.
Besten Dank für Tipps oder Link.
Gruß Delphi10


jaenicke - Do 11.03.10 14:51

Du kannst prüfen ob das Programm gerade debuggt wird. Allerdings passiert das dann auch, wenn du es auf einem anderen PC aus Delphi heraus machst, aber nicht, wenn du es ohne Debugging aus der IDE startest.

Ich selbst habe das sehr viel einfacher gelöst. Zum Release kompiliert das Releaseskript die Exe einfach mit einer anderen Includedatei. Das geht automatisch, da es einfach die entsprechende Zeile in der Projektdatei durch die andere ersetzt und nach dem Kompilieren wiederherstellt. Vorher löscht es auch noch das Ausgabeverzeichnis und erstellt so alles neu bevor es automatisch das Setup erstellt und die fertigen Pakete auf den FTP-Server hochlädt.

Das geht seit XP mit den erweiterten Shellbefehlen direkt per Batchdatei, einfacher ist natürlich ein kleines Tool, das in der Batchdatei ausgerufen wird und die Zeile ändert.

Auf diese Weise kann ich mittels kleinen Änderungen an den Buildskripten die Compilerschalter für verschiedene Versionen sehr einfach setzen und diese automatisiert erstellen. Und ich habe eben ohne Skript eine Debugversion, die ich jederzeit in Delphi laden und weiterentwickeln kann.


Nersgatt - Do 11.03.10 14:52

Ich glaube, das wäre das falsche Vorgehen. Erklär mal, warum die Anwendung Exceptions wirft, wenn Sie aus der IDE gestartet wird und warum sie diese nicht wirft, wenn sie direkt gestartet wird.


jaenicke - Do 11.03.10 14:58

Die Exe wird die dort vermutlich auch werfen, nur dass man davon nichts sieht, weil man die Exceptions ja (ggf. nach deren Weitergabe usw.) abfängt. Beim Debuggen zeigt Delphi aber diese dann auch an. Und die dann in Delphi zu unterdrücken ist auch keine sinnvolle Lösung, denn dann sieht man diese auch an anderen (unerwarteten) Stellen nicht mehr.

Das war jedenfalls einer der Gründe weshalb ich es so mache wie ich es im Moment mache.


Tastaro - Do 11.03.10 15:34

Um die gestellte Frage zu beantworten:


Delphi-Quelltext
1:
2:
3:
4:
if DebugHook <> 0 then
begin
   //DebugHook ist dann <> 0, wenn aus der IDE gestartet wurde
end;


Beste Grüße


delphi10 - Fr 12.03.10 15:06

Hallo
Erstmal Danke für Eure schnellen und kompetenten Antworten.
@jaenicke: Ist sehr flexibel und läßt sich für vielfältige Zwecke formulieren
@Tastaro: Genau auf den Punkt gebracht.
Eingebaut habe ich erstmal die Lösung vom Tastaro, was ohne großen Umbauaufwand erledigt war. Langfristig und bei größeren Projekten werde ich aber jaenickes Vorschlag präferieren. Letztendlich lösen aber beide mein Problem.
Gruß Delphi10


Delete - Fr 12.03.10 20:08

Stichwort: Design Time Control