Entwickler-Ecke

Sonstiges (Delphi) - Feststellen ob mein Delphi-Programm mit Debugger läuft


Tastaro - Do 08.11.07 14:06
Titel: Feststellen ob mein Delphi-Programm mit Debugger läuft
Hallo alle,

gibt es eine Möglichkeit, dass ein Delphi-Programm erkennen kann, ob es in der IDE gestartet wurde (F9) oder ob es standalone läuft?

Beste Grüße
Tastaro


Sinspin - Do 08.11.07 16:55

Die einfachste Möglichkeit besteht darin einfach einen Parameter an dein Programm zu übergeben wenn du es über die IDE startest.


Mitmischer 1703 - Do 08.11.07 17:09

Wie geht das?


Timosch - Do 08.11.07 17:39

Ähm, Start->Parameter...
Stichwort ParamStr und ParamCount


Mitmischer 1703 - Do 08.11.07 17:41

In FoSu guck ich! :les:


Tastaro - Do 08.11.07 17:59

user profile iconSinspin hat folgendes geschrieben:
Die einfachste Möglichkeit besteht darin einfach einen Parameter an dein Programm zu übergeben wenn du es über die IDE startest.


Klar geht das. Aber es soll nicht nur bei mir funktionieren sondern auch bei meinen Kollegen. Und das ohne, dass man vergessen kann den Parameter anzugeben.

Beste Grüße
Tastaro


Wolle92 - Do 08.11.07 18:13

Vielleicht einfach kontrollieren, ob der IDE-Prozess existiert?


Tastaro - Do 08.11.07 18:24

user profile iconWolle92 hat folgendes geschrieben:
Vielleicht einfach kontrollieren, ob der IDE-Prozess existiert?


Das reicht leider nicht. Denn die IDE kann ja laufen obwohl ich das Programm nicht aus der IDE gestartet habe.

Beste Grüße
Tastaro


Wolle92 - Do 08.11.07 18:32

Letzte Änderung mit aktueller Zeit vergleichen?
Bei maximal 1 Minute Abweichung kann man mit ziemlicher Sicherheit davon ausgehen, dass es mit dem Debugger gestartet wurde, da es dann ja erst grade kompiliert wurde...

Oder gibt es vielleicht eine Möglichkeit, dass man die Caption eines fremden Fensters eines fremden Prozesses lesen kann? Wenn es grad am Debuggen ist, steht nämlich Running drin...


Chryzler - Do 08.11.07 18:37

http://www.delphi-forum.de/viewtopic.php?t=76204


Delete - Do 08.11.07 19:05


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function IsDebuggerPresent: Boolean;
begin
  Result := DebugHook <> 0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
if IsDebuggerPresent then Label1.caption:='in Delphi' else Label1.caption:='not in Delphi';
end;


BenBE - Sa 10.11.07 14:18

Prüf einfach ob ein INT 03h ne Exception wirft ;-)

Es gibt aber für nahezu jeden Debugger-Check inzwischen zahlreiche Möglichkeiten, diesen zu umgehen.

DebugHook: Einfach Nillen ;-) ...
IsDebuggerPresent: Einfach das TLS ändern ;-) ...
Parameter-Check: Einfach noppen :P ...
Datum\Uhrzeit: Erzeugt sowieso false positives :nixweiss: ... Ist daher kein Schutz ...
IDE-Prozess prüfen: Noppt man einfach die Prüfung raus oder ändert den hardcodierten Namen :mrgreen: ...
Parent-Prozess-Prüfung: Siehe vorigen Punkt 8) ...

Und nun bitte zu den ernsthaften Vorschlägen! :twisted:


Chryzler - Sa 10.11.07 14:37

Ich glaube user profile iconTastaro geht es weniger darum, dass man die Überprüfung nicht umgehen kann, sondern darum, dass z.B. beim Debuggen zusätzliche Debug-Informationen ausgegeben werden o.ä.


Tastaro - Mo 19.11.07 14:30

Hallo alle,

das mit dem DebugHook ist genau das was ich brauchte.
Vielen Dank für den Tipp.

Chryzler hatte recht: Es geht mir nicht darum die Software irgendwie zu schützen sondern noch einen zusätzlichen Button mit bestimmter Funktionalität anzuzeigen wenn das Programm aus der IDE gestartet wird.

Danke an alle die versucht haben mir zu helfen.

Beste Grüße
Tastaro