Autor Beitrag
Petros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131
Erhaltene Danke: 1


Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
BeitragVerfasst: Do 10.06.10 17:15 
Hi an alle delphi freunde

Ich habe mal wieder ein problem und komme nicht weiter, und zwar wie oben beschrieben brauche ich hilfe bei einer Timer Funktion.

Ich habe einen handler geschrieben der folgenes tut.
Er startet einen Server wo ich auch eine Update funktion eingefügt habe.
Mein problem ist es das ich wenn ich es dann starte wieder beenden muss, dann wieder starten und dann erst das update benutzen kann.
Das gleiche muss ich auch machen wenn ich nur die CMD fenster benutze.

Ich möschte es gern so machen:

Ich Start den Server und Klicke dann auf Update.
Dann soll der Server beendet werden das geschiet über taskkill, der Händler ist aber noch offen.

Dann soll der Server dann wieder starten (automatisch nach 1 sec), und dann eine weitere secunde dann die update funktion starten.

Das ganze läuft über DosCommand.

Wie bekomm ich das hin bin voll am verzweifeln

MFG Petros

Edit/ so sollte jetzt besser ich habe nur ein Tablett PC ist ein bisschen umständlich beim schreiben als am PC


Zuletzt bearbeitet von Petros am Do 10.06.10 17:33, insgesamt 2-mal bearbeitet
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Do 10.06.10 17:20 
Könntest du da erstmal ein paar Satzzeichen und Groß- / Kleinschreibung einfügen, sodass man deinen Text auch vernünftig lesen kann?

_________________
PROGRAMMER: A device for converting coffee into software.
Petros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131
Erhaltene Danke: 1


Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
BeitragVerfasst: Fr 11.06.10 14:52 
Habe den Text jetzt nochmal verändert hoffe ist jetzt besser....

LG Petros
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 11.06.10 15:32 
Ich würde Dir gerne helfen, verstehe aber immer nocht nicht was Du eigentlich machen willst.
Wieviele Programme sind beteiligt?
Wieviel davon sind Dienste?
Wer soll wen steuern?

MfG
Bummi
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Fr 11.06.10 15:39 
Hi, ich versuch mal dies zu verstehen.
Du startest einen Server (Linux/Windows) oder was meinst Du mit Server!?
Dieser soll sich oder etwas anderes Updaten!?
Dein Problem, das er es nicht automatisch macht!?

Würde eventuell sagen das Deine Procedure nicht richtig aufgerufen wird.
Vielleicht brauchst Du keinen Timer, wenn Du uns mal die Aufrufe zeigst. So könnte man evtl erkennen was Falsch ist bzw. was man anders machen kann!

Ansonsten vielleicht mal richtig formulieren. Denn Du bist der einzigste der es ja versteht was Du kongret machst, machen willst!
Wir können nur raten!
Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
Petros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131
Erhaltene Danke: 1


Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
BeitragVerfasst: Fr 11.06.10 18:40 
Also ich versuche es mal genau zu erklären....

Es handelt sich um ein Voice Video Server der läuft auf einem Windows Server 2008..

Die start und Stop Funktion funktionieren ohne problem... mir geht es genau um die updaten funktion..

Der server ist noch eine beta Test version und muss regelmäßig ein update machen...

Das Problem dabei ist das ich wenn ich nun ein update machen will den Server Starten dann wieder Beenden und dann wieder starten muss und kann dann erst ein updaten installieren.

Es soll so funktionieren das wenn ich auf update klicken der Server dann beendet wird und dann wieder automatisch startet und dann 1sec später die update funktion ausführt..

das selbe muss ich auch machen ohne das programm was ich grad mache

kurze erläuterung
ich starte ksu_server.exe es öffnet sich ein CMD fenster.. bevor ich die ksu_update.bat benutze kann muss ich ihn wieder beenden dann neu starten und dann kann ich erst ksu_update.bat benutzen.

ich versuch es mal in einem kleinem beispiel zu erläutern

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.btnupClick(Sender: TObject);
var
 Command : String;
  begin
    KillTask('ksu_server.exe');
    Memo1.Lines.Clear;
    Memo2.Lines.Clear;
end;
begin // nach dem beenden startet der ksu_server.exe wieder automatisch
    Command := ExtractFilePath(Application.ExeName) + 'ksu_server.exe';
    DosCommand2.CommandLine := Command;
    Memo1.Text := Command;
    DosCommand2.Execute;
end;
begin //das update soll dann 1 sec später automatisch starten nach dem neustart
    Command := ExtractFilePath(Application.ExeName) + 'ksu_update.bat';
    DosCommand2.CommandLine := Command;
    Memo2.Text := Command;
    DosCommand2.Execute;
end;


das ganze soll dann mit nur 1 klick funktionieren wenn ich auf btnup klicke

Ich hoffe das ich es diesmal etwas genauer erklären konnte

Hier nochmal der gesamte Quelltext

ausblenden volle Höhe 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:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DosCommand, StdCtrls, Tlhelp32, ExtCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Panel1: TPanel;
    Memo2: TMemo;
    btnstart: TButton;
    btnstop: TButton;
    btnup: TButton;
    DosCommand1: TDosCommand;
    DosCommand2: TDosCommand;
    procedure btnstartClick(Sender: TObject);
    procedure btnstopClick(Sender: TObject);
    procedure btnupClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
      UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(
                        OpenProcess(PROCESS_TERMINATE,
                                    BOOL(0),
                                    FProcessEntry32.th32ProcessID),
                                    0));
     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

procedure TForm1.btnstartClick(Sender: TObject);
var
 Command : String;
  begin
    Memo1.Lines.Clear;
    Command := ExtractFilePath(Application.ExeName) + 'ksu_server.exe';
    DosCommand1.CommandLine := Command;
    Memo1.Text := Command;
    DosCommand1.Execute;
end;

procedure TForm1.btnstopClick(Sender: TObject);
begin
 KillTask('ksu_server.exe');
end;

procedure TForm1.btnupClick(Sender: TObject);
var
 Command : String;
  begin
    Memo2.Lines.Clear;
    Command := ExtractFilePath(Application.ExeName) + 'ksu_update.bat';
    DosCommand2.CommandLine := Command;
    Memo1.Text := Command;
    DosCommand2.Execute;
end;

end.


MFG Petros

PS. Bitte achtet nicht auf Rechtschreibfehler da ich nur eine virtuelle Tastertur habe und die manschmal nicht so schnell reagiert..
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Fr 11.06.10 19:15 
Hi
Warum der Server erst gestartet werden muss dann beendet, wieder gestartet dann update mhhh entzieht sich meiner logik.
Müsste nicht normalerweise erst update ausreichen, dann Serverneustarten sein!? mh...

Gut, ansonsten folgenden Vorschlag.
in Deiner btnupClick Procedure
rufst du die startProcedure für den Server auf,
setzt ein sleep,
rufst die StopProcedure auf, oder KillProcedure
setzt ein sleep,
dann wieder die startprocedure,
setzt ein sleep
dann den Aufruf des Update

Theoretisch müsste jetzt nach dem Update ein Neustart erfolgen!!!! Warum Du dies anders machst mhh...

Die sleeps dienen dazu das Dein Server erst mal richtig hochfährt, dann wieder richtig down geht, dann wieder startet usw. :eyecrazy:
Wie lange Dein Server Zeitbenötigt um Hoch und runterzufahren wirst Du sicherlich wissen, danach richtet sich auch die sleep-zeit.
Ein Timer währe sicherlich besser, müsste aber selbst erst überlegen wie das umzusetzen währe :oops:
Zumal Du dadurch auch ne aktuelle Anzeige hast, in welchem Status sich dein Prog gerade befindet.
Noch besser ist den Server abzufragen ob er online ist um ihn wieder down zu machen usw.
Auf die schnelle währe dies ein billiger Vorschlag :roll:

Gruss Alf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!

Für diesen Beitrag haben gedankt: Petros
Petros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131
Erhaltene Danke: 1


Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
BeitragVerfasst: Sa 03.07.10 18:24 
Jo danke Alf das mit der Sleep funktion hat wunderbar funktioniert und macht dann auch genau das was ich mir vorgestellt hatte

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.btnupClick(Sender: TObject);
var
 Command : String;
  begin
    KillTask('ksu_server.exe');
    Memo1.Lines.Clear;
    Memo2.Lines.Clear;
sleep(1000);
    Command := ExtractFilePath(Application.ExeName) + 'ksu_server.exe';
    DosCommand2.CommandLine := Command;
    Memo1.Text := Command;
    DosCommand2.Execute;
sleep(1000);
    Command := ExtractFilePath(Application.ExeName) + 'ksu_update.bat';
    DosCommand2.CommandLine := Command;
    Memo2.Text := Command;
    DosCommand2.Execute;
end;


Vielen Vielen Dank
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 04.07.10 10:38 
Und wenn dein Programm derweil noch reagieren soll, kannst du Delay statt Sleep benutzen:
www.delphipraxis.net...delay+revisited.html

Für diesen Beitrag haben gedankt: Petros
Petros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131
Erhaltene Danke: 1


Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
BeitragVerfasst: So 04.07.10 20:59 
Danke jaenicke werds gleich mal testen

//edt danke Läuft sogar noch besser

MFG Petros