Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Anwendung im Hintergrund [Konsolanwendung oder VCL Formular] (https://www.delphipraxis.net/175405-anwendung-im-hintergrund-%5Bkonsolanwendung-oder-vcl-formular%5D.html)

Back2Code 19. Jun 2013 09:29

Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Das ist jetzt eher eine allgemeine Frage. Ich möchte gerne eine Anwendung im Hintergrund laufen lassen. Es gibt keinerlei Inputmöglichkeiten / Einstellungen. Also eine GUI brauche ich sowieso nicht.

Meine Frage ist jetzt was sich besser verhält bzw besser dafür geeignet wäre. Eine Konsolanwendung oder eine VCL Formularanwendung. In beiden Fällen würde ich mich dann als erstes darum kümmern, dass man weder eine Form / noch Konsole sieht, da es wie gesagt einfach im Hintergrund laufen soll.

Später wollte ich dann noch Indy mit implementieren um Strings per HTTP auszulesen / zu senden.

Eine kleine Antwort + Begründung weil würde mir schon weiterhelfen. Danke im voraus. :thumb:

Der schöne Günther 19. Jun 2013 09:39

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Ich bin kein Experte, aber spontan wäre ich erst einmal direkt den VCL-Weg gegangen. Irgendwann brauchst du vielleicht doch eine Oberfläche. Einen TTimer hast du in einer Konsolenanwendung auch nicht.

Back2Code 19. Jun 2013 09:41

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1218999)
Ich bin kein Experte, aber spontan wäre ich erst einmal direkt den VCL-Weg gegangen. Irgendwann brauchst du vielleicht doch eine Oberfläche. Einen TTimer hast du in einer Konsolenanwendung auch nicht.

Also ich weiß aber definitiv, dass ich keine Oberfläche brauchen werde. Auch kein Traymenü oder dergleichen.

baumina 19. Jun 2013 09:43

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Eigentlich müsste sich dafür eine Windows-Dienstanwendung (Service-Anwendung) anbieten.

Back2Code 19. Jun 2013 10:02

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von baumina (Beitrag 1219001)
Eigentlich müsste sich dafür eine Windows-Dienstanwendung (Service-Anwendung) anbieten.

Dafür sind dann aber auch Adminrechte notwendig, wenn es sich um keinen lokalen Administrator handelt oder?

baumina 19. Jun 2013 10:10

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von Polymorphin (Beitrag 1219004)
Zitat:

Zitat von baumina (Beitrag 1219001)
Eigentlich müsste sich dafür eine Windows-Dienstanwendung (Service-Anwendung) anbieten.

Dafür sind dann aber auch Adminrechte notwendig, wenn es sich um keinen lokalen Administrator handelt oder?

Soviel ich weiß braucht man Adminrechte einmalig bei der Installation (Registrierung) des Dienstes, danach müsste es einfach so laufen können, ich weiß es aber nicht genau, sorry.

Back2Code 19. Jun 2013 10:14

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von baumina (Beitrag 1219006)
Zitat:

Zitat von Polymorphin (Beitrag 1219004)
Zitat:

Zitat von baumina (Beitrag 1219001)
Eigentlich müsste sich dafür eine Windows-Dienstanwendung (Service-Anwendung) anbieten.

Dafür sind dann aber auch Adminrechte notwendig, wenn es sich um keinen lokalen Administrator handelt oder?

Soviel ich weiß braucht man Adminrechte einmalig bei der Installation (Registrierung) des Dienstes, danach müsste es einfach so laufen können, ich weiß es aber nicht genau, sorry.

Ja gut, dann fällt diese Option aber weg für mich, da ich nicht weiß ob derjenige Admin Rechte hat.

p80286 19. Jun 2013 10:19

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Warum verschwendest Du nur einen Gedanken an eine "Form"-Anwendung?
Wenn Du die Windows Message Queue nicht abarbeiten willst/mußt, ist die Konsole vollkommen ausreichend.

Gruß
K-H

Back2Code 19. Jun 2013 10:23

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von p80286 (Beitrag 1219009)
Warum verschwendest Du nur einen Gedanken an eine "Form"-Anwendung?
Wenn Du die Windows Message Queue nicht abarbeiten willst/mußt, ist die Konsole vollkommen ausreichend.

Gruß
K-H

Ist es denn möglich die Komponenten von Indy trotzdem in der Konsolanwendung zu nutzen? Und wenn ja, wie erzeugt/erstellt man diese. Da man ja keinen Formulardesigner mehr hat, müsste man die propertys auch alle selber manuell ausfüllen nehme ich an, ansonsten gelten die Standardwerte oder?

Olli73 19. Jun 2013 10:44

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von Polymorphin (Beitrag 1219011)
Ist es denn möglich die Komponenten von Indy trotzdem in der Konsolanwendung zu nutzen? Und wenn ja, wie erzeugt/erstellt man diese. Da man ja keinen Formulardesigner mehr hat, müsste man die propertys auch alle selber manuell ausfüllen nehme ich an, ansonsten gelten die Standardwerte oder?


Datei / Neu / weitere -> Webbroker / Web server Anwendung -> Konsolenanwendung

Das erstellt dir dann auch ein (Web)Modul für Einstellungen und (nicht sichtbare) Komponenten.

Back2Code 19. Jun 2013 10:53

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von Olli73 (Beitrag 1219018)
Zitat:

Zitat von Polymorphin (Beitrag 1219011)
Ist es denn möglich die Komponenten von Indy trotzdem in der Konsolanwendung zu nutzen? Und wenn ja, wie erzeugt/erstellt man diese. Da man ja keinen Formulardesigner mehr hat, müsste man die propertys auch alle selber manuell ausfüllen nehme ich an, ansonsten gelten die Standardwerte oder?


Datei / Neu / weitere -> Webbroker / Web server Anwendung -> Konsolenanwendung

Das erstellt dir dann auch ein (Web)Modul für Einstellungen und (nicht sichtbare) Komponenten.

AH danke. Kann ich so ein Webmodul für nicht sichtbare Kompos auch im Nachhinein in eine Konsolanwendung adden?

Bernhard Geyer 19. Jun 2013 10:54

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von Polymorphin (Beitrag 1219007)
Zitat:

Zitat von baumina (Beitrag 1219006)
Zitat:

Zitat von Polymorphin (Beitrag 1219004)
Zitat:

Zitat von baumina (Beitrag 1219001)
Eigentlich müsste sich dafür eine Windows-Dienstanwendung (Service-Anwendung) anbieten.

Dafür sind dann aber auch Adminrechte notwendig, wenn es sich um keinen lokalen Administrator handelt oder?

Soviel ich weiß braucht man Adminrechte einmalig bei der Installation (Registrierung) des Dienstes, danach müsste es einfach so laufen können, ich weiß es aber nicht genau, sorry.

Ja gut, dann fällt diese Option aber weg für mich, da ich nicht weiß ob derjenige Admin Rechte hat.

Wenn deine Anforderung
Zitat:

Ich möchte gerne eine Anwendung im Hintergrund laufen lassen.
bedeutet das die Anwendung auch ohne angemeldeten User laufen soll geht es nur das ein (lokaler) Admin das Ding installiert.
Ansonsten ist es eine Trayanwendung auch wenn es im Tray nur ein "Beenden" und "Info"-Eintrag gibt.

jsheyer 19. Jun 2013 10:55

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Ausserdem kann man in einer Konsolenanwendung alle nicht visuelle Komponenten verwenden.
Es reicht einfach ein Datenmodul hinzuzufügen, und dort können alle nicht visuellen Komponenten direkt darauf plaziert werden.
Alternativ muss man die uses Anweisung manuell erweitern und die benötigten Komponenten per Quelltext zur Laufzeit erzeugen. :-)

Gruß
Jörg

Aphton 19. Jun 2013 11:03

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Konsolenanwendung oder VCL?
Keines von beiden!

Standardkonsolenanwendung:
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
end.
Reine Anwendung:
Delphi-Quellcode:
program Project1;

uses
  SysUtils;

begin
end.
Folglich:
Delphi-Quellcode:
program Project1;

uses
  SysUtils, Windows;

begin
  while true do
  begin
    Sleep(5000);
    MessageBox(0, 'I exist', 'I', MB_ICONINFORMATION);
  end;
end.

Back2Code 19. Jun 2013 12:02

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Man lernt immer was dazu. Der Begriff reine Anwendung war mir bis eben fremd ;-) Hätt ich das vorher gewusst, hätte ich danach gleich gesucht oder anderst formuliert.

p80286 19. Jun 2013 12:09

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
@Aphton
und wo ist der Unterschied (abgesehen vom {$APPTYPE CONSOLE})?

Gruß
K-H

Ralf Kaiser 19. Jun 2013 12:15

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von Polymorphin (Beitrag 1219011)
Ist es denn möglich die Komponenten von Indy trotzdem in der Konsolanwendung zu nutzen? Und wenn ja, wie erzeugt/erstellt man diese. Da man ja keinen Formulardesigner mehr hat, müsste man die propertys auch alle selber manuell ausfüllen nehme ich an, ansonsten gelten die Standardwerte oder?

Füge der Anwendung ein Datenmodul hinzu das die Indy-Komponenten aufnimmt. Lediglich das Datenmodul musst du dann selbst erstellen. (dafür sind Datenmodule da! :wink:)

Namenloser 19. Jun 2013 12:22

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von p80286 (Beitrag 1219031)
und wo ist der Unterschied (abgesehen vom {$APPTYPE CONSOLE})?

Dadurch ändert sich irgendein Flag in der Exe und das Programm wird dann von Windows anders behandelt. Hauptsächlicher Unterschied: Mit AppType Console wird immer ein Konsolenfenster angezeigt, damit ist es schwierig, das Programm unsichtbar im Hintergrund auszuführen.

Back2Code 19. Jun 2013 12:30

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von Ralf Kaiser (Beitrag 1219032)
Zitat:

Zitat von Polymorphin (Beitrag 1219011)
Ist es denn möglich die Komponenten von Indy trotzdem in der Konsolanwendung zu nutzen? Und wenn ja, wie erzeugt/erstellt man diese. Da man ja keinen Formulardesigner mehr hat, müsste man die propertys auch alle selber manuell ausfüllen nehme ich an, ansonsten gelten die Standardwerte oder?

Füge der Anwendung ein Datenmodul hinzu das die Indy-Komponenten aufnimmt. Lediglich das Datenmodul musst du dann selbst erstellen. (dafür sind Datenmodule da! :wink:)

Ich sehe grade, dass durch das Datenmodul die Anwendung "utopisch" gewachsen ist im Release build 700 kb +. Wie würde das Gnaze dann aussehen wenn ich Indy nutzen möchte, ohne dass ich ein Datenmodul nutze und kann ich da mit einer kleineren Erzeugung rechnen?

baumina 19. Jun 2013 12:38

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von Polymorphin (Beitrag 1219034)
Ich sehe grade, dass durch das Datenmodul die Anwendung "utopisch" gewachsen ist im Release build 700 kb +. Wie würde das Gnaze dann aussehen wenn ich Indy nutzen möchte, ohne dass ich ein Datenmodul nutze und kann ich da mit einer kleineren Erzeugung rechnen?

Ein DataModule hat eigentlich nur SysUtils und Classes in der uses-Liste. Die 2 Units wird Indy mit ziemlicher Sicherheit sowieso auch benutzen.

p80286 19. Jun 2013 13:02

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
@NamenLozer
Danke für den Hinweis. Ich habe dann auch selbst ein wenig gewühlt. Es scheint so, daß über APPTYPE CONSOLE Input/Output der Console zugewiesen wird.
Also müßte es auch so gehen:
Delphi-Quellcode:
program Project2;

uses
  SysUtils;

var
  name : string;
  io  : textfile;
begin
  assignfile(io,'\\.\CON');
//  reset(io);
  WriteLn(io,'Please enter your name');
  ReadLn(io,name);
  WriteLn(io,'Your name is '+name);
  WriteLn(io,'');
  WriteLn(io,'Press enter to exit');
  ReadLn(io,name);

end.
Geht aber nicht, da die Gerätedatei nicht erkannt wird/falsch ist.

Gruß
K-H

hathor 14. Nov 2013 20:04

AW: Anwendung im Hintergrund [Konsolanwendung oder VCL Formular]
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1218999)
Ich bin kein Experte, aber spontan wäre ich erst einmal direkt den VCL-Weg gegangen. Irgendwann brauchst du vielleicht doch eine Oberfläche. Einen TTimer hast du in einer Konsolenanwendung auch nicht.

Timer gibt es:

Delphi-Quellcode:
program Iexist;

uses
  SysUtils, Windows;

var i : Integer;

procedure TimerProc(Wnd:HWnd;Msg,TimerID,dwTime:DWORD);stdcall;
begin
  i:=i+20;
end;

begin
i:=0;
SetTimer(0,0,1000,@TimerProc); // 1 sec

repeat
    inc(i);
    MessageBox(0, PWChar(IntToStr(i)), 'I exist!', MB_ICONINFORMATION);
    Sleep(5000);
until i>100; // keine Angst: MessageBox erscheint nur 3x

    Halt(0);
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz