Feststellen ob eine externe Anwendung läuft
-
- Beiträge: 17
- Registriert: Do 24. Mai 2007, 16:50
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten:
Feststellen ob eine externe Anwendung läuft
Hallo ich habe folgendes vor:
Für eine Anwendung soll es die Möglichkeit geben, dass sie sich selbst aktualisiert. Dazu habe ich schon jede Menge Infos gefunden und auch eigene Ideen. Problem ist, dass die vorkommen kann, dass die Hauptanwendung während des Downloads beendet wird.
Ich möchte nun, dass das Softwareupdate auf folgende Weise funktioniert:
1) Anwendung prüft im Web, ob es eine neue Version gibt
2) Wenn ja, wird eine 2. Anwendung gestartet (nennen wir sie mal "Update"), die den Download startet.
3) wenn der Download beendet ist, soll geprüft werden, ob die Hauptanwendung (noch) läuft, danach wird dann entschieden, ob die Hauptanwendung beneendet und neu gestartet wird, oder nicht.
Mein Problem liegt in Punkt 3: wie kann ich unter Linux sicher feststellen, ob eine Anwendung läuft oder nicht. Unter Windows wäre das sicher recht einfach.
Bin ein absoluter Linux-Neuling und muss mich jetzt (leider) damit auseinandersetzen eine entsprechende Linux-Anwendung zu schreiben.
Ich hoffe mir kann jemand helfen.
Gruß
Jacques
Für eine Anwendung soll es die Möglichkeit geben, dass sie sich selbst aktualisiert. Dazu habe ich schon jede Menge Infos gefunden und auch eigene Ideen. Problem ist, dass die vorkommen kann, dass die Hauptanwendung während des Downloads beendet wird.
Ich möchte nun, dass das Softwareupdate auf folgende Weise funktioniert:
1) Anwendung prüft im Web, ob es eine neue Version gibt
2) Wenn ja, wird eine 2. Anwendung gestartet (nennen wir sie mal "Update"), die den Download startet.
3) wenn der Download beendet ist, soll geprüft werden, ob die Hauptanwendung (noch) läuft, danach wird dann entschieden, ob die Hauptanwendung beneendet und neu gestartet wird, oder nicht.
Mein Problem liegt in Punkt 3: wie kann ich unter Linux sicher feststellen, ob eine Anwendung läuft oder nicht. Unter Windows wäre das sicher recht einfach.
Bin ein absoluter Linux-Neuling und muss mich jetzt (leider) damit auseinandersetzen eine entsprechende Linux-Anwendung zu schreiben.
Ich hoffe mir kann jemand helfen.
Gruß
Jacques
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
zu 3.
ps -A gibt dir alle laufende Prozesse aus
http://www.linux-ag.de/linux/LHB/node96.html" onclick="window.open(this.href);return false;
ps -A gibt dir alle laufende Prozesse aus
http://www.linux-ag.de/linux/LHB/node96.html" onclick="window.open(this.href);return false;
-
- Beiträge: 958
- Registriert: Mo 11. Sep 2006, 22:56
mit ps -Clazarus kriegst du z.B. nur zurück, ob Lazarus läuft.
z.B:
z.B:
Code: Alles auswählen
theo@linux:~> ps -Clazarus
PID TTY TIME CMD
6467 ? 00:00:18 lazarus
Zuletzt geändert von theo am Fr 15. Jun 2007, 15:25, insgesamt 1-mal geändert.
Code: Alles auswählen
function IsCommandRunning(cmd:String):Boolean;
var t:TProcess;
s:TStringList;
begin
Result:=false;
t:=tprocess.create(nil);
t.CommandLine:='ps -C'+cmd;
t.Options:=[poUsePipes,poWaitonexit];
try
t.Execute;
s:=tstringlist.Create;
try
s.LoadFromStream(t.Output);
Result:=Pos(cmd,s.Text)>0;
finally
s.free;
end;
finally
t.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CheckBox1.checked:=IsCommandRunning(Edit1.text);
end;
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Wiso so umständlich ?
Ich prüfe in meinem Online Update einfach ob ich alle zu updatenden Dateien beschrieben kann, wenn nicht wiederhole ich das solange bis ich sie alle schreiben kann (Warten auf exklusiven zugriff) der benutzer kann das ganze natürlich jederzeit abbrechen.
Ich prüfe in meinem Online Update einfach ob ich alle zu updatenden Dateien beschrieben kann, wenn nicht wiederhole ich das solange bis ich sie alle schreiben kann (Warten auf exklusiven zugriff) der benutzer kann das ganze natürlich jederzeit abbrechen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
im Wiki ist ein ausfürhlicheres Beispiel zu TProcess: Externe Programme ausführen.creed steiger hat geschrieben:also so ungefähr kriegst du alle Prozesse:
begin
t:=tprocess.create(nil);
s:=tstringlist.Create;
t.CommandLine:='ps -A';
t.Options:=[poUsePipes,poWaitonexit];
t.Execute;
s.LoadFromStream(t.OutPut);
t.Free;
end;
Obiges Beispiel sollte ebenfalls entsprechend erweitert werden, der Code ist etwas störanfällig. Wenn bei poUsePipes die Pipe voll ist, und der Prozess noch weiter läuft, wird dieser gestopt und gewartet, bis die Pipe wieder geleert wird. Dadurch kommt es bei großem Output dazu, das obiger Code letztlich einfriert.
Um natürlich wie theo geschrieben hat, konkrett nur einen Prozess abzufragen, ist die Pipe aber natürlich ausreichend, ohne extra die Daten stückweise abzurufen, wie im Wiki beschrieben.
Ansonsten kannst du mit TProcess so gut wie alles aufrufen und anschließend auswerten.
Johannes
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Halt ich für sehr bedenklich.@Christian: Der Anwender soll nichts von dem Update mitbekommen und das Programm soll nur gestartet werden, wenn es währed des Downloads nicht beendet wurde.
Aber muss er ja aber auch nicht wenn das programm läuft wirst du nicht aufs executable schreiben dürfen auf allen osś es sei denn du bist als root angemeldet dann ists aber auch ok.
Aber ich lob mir die aktuellen Betriebsysteme gegen solche Entwickler wie dich

Zumindest um eine Meldung wirst du nicht rumkommen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Hört sich nach Methode Microsoft anJacques hat geschrieben:@Christian: Der Anwender soll nichts von dem Update mitbekommen und das Programm soll nur gestartet werden, wenn es währed des Downloads nicht beendet wurde.

Spätestens, wenn sich die Anwendung nach dem Download neu startet, wird es der Benutzer wohl merken...
Bei einer Form gibt es doch die EIgenschaft Form1.Visible beispielsweise. Ließe sich das nicht darüber lösen?
-
- Beiträge: 17
- Registriert: Do 24. Mai 2007, 16:50
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten:
Das ist so schon OK, dass der Anwender das nicht mit bekommt, da die Anwendung nicht vom Anwender selbst gestartet wird und dem Anwender (wenn man ihn denn so bezeichnen kann) der Rechner auf dem das Prog läuft auch gar nicht gehört sonderm ihm Leihweise zur Verfügung gestellt wird.Christian hat geschrieben:Halt ich für sehr bedenklich.@Christian: Der Anwender soll nichts von dem Update mitbekommen und das Programm soll nur gestartet werden, wenn es währed des Downloads nicht beendet wurde.
Aber muss er ja aber auch nicht wenn das programm läuft wirst du nicht aufs executable schreiben dürfen auf allen osś es sei denn du bist als root angemeldet dann ists aber auch ok.
Aber ich lob mir die aktuellen Betriebsysteme gegen solche Entwickler wie dich
Zumindest um eine Meldung wirst du nicht rumkommen.
Der "Anwender" schaltet den PC quasi nur morgens einmal an und abends wieder aus. Mehr hat er fast nicht zu tun. Soll er auch gar nicht. Deshalb soll er auch von dem Update nicht mitbekommen.
Das jetzt genauer zu erklären ist etwas komplizierter und gehört hier nicht wirklich her. Jedenfalls hat das nichts mit Microsoft-Methode zu tun.
Gruß
Jacques
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Na gut, aber wenn es darum geht, braucht man auch kein kompliziertes Update, sondern ne kleine http-Get/Post Anfrage würde ja auch reichen. Und ich kann mir auch durchaus möglichkeiten vorstellen, wo ain automatisches Backup Sinn macht. Ne Nachricht ist natürlich normalerweise nett. Oder die Möglichkeit, es in den Optionen zu deaktivieren, je nach Funktion.
Aber wenns wirklich nur Leihrechner sind, warum nicht, wenn es angemessen ist.
Aber wenns wirklich nur Leihrechner sind, warum nicht, wenn es angemessen ist.
Johannes