Windows Dienste << Status >>

Status
Nicht offen für weitere Antworten.

m!k3

Bekanntes Mitglied
Hallo Zusammen,

habe schon paar Einträge bezüglich des Thema's gefunden. Allerdings reichen mir die Info's dort nicht aus.

Ich möchte mir eine Administrationskonsole programmieren, und mit dieser verschiedene Dienste starten und beenden können. Ist ja soweit kein Problem, nur möchte ich zur Laufzeit der Konsole den aktuellen Status eines Dienstes einsehn können. Mein Problem ist nun, wie ich diesen Status in Erfahrung bringen könnte.

Es muss ja irgendeine Möglichkeit geben, andere Programme können ja auch für ihren Dienst den Status ermitteln.

danke für die hilfe.

mike
 
Hi,

manchmal geht Process#waitFor().
Je nachdem ob Dein Befehl nur einen anderen Prozess startet und sich nach erfolreichem starten sofort erfolgreich beendet oder nicht(zB. Konsole net send).

Anderfalls kannst Du auch Thread#isAlive(9 und dergleichen verwenden, wenn Du Deine Anwednungen als Thread gestartet kriegst und nicht dieselben Fehler auftreten wie oben schon erwänht.

greetz
SLi
 
sliwalker hat gesagt.:
Hi,

manchmal geht Process#waitFor().
Je nachdem ob Dein Befehl nur einen anderen Prozess startet und sich nach erfolreichem starten sofort erfolgreich beendet oder nicht(zB. Konsole net send).

Anderfalls kannst Du auch Thread#isAlive(9 und dergleichen verwenden, wenn Du Deine Anwednungen als Thread gestartet kriegst und nicht dieselben Fehler auftreten wie oben schon erwänht.

greetz
SLi

merci für die hilfe. also du meinst solange er auf den process wartet wäre dann mein status grün, und wenn ich den dienst beende, wäre der status rot - um es mal bildlich auszudrücken.

zu der Thread Lösung. Wäre das denn wirklich ratsam jeden Dienst als Thread zu starten?!
 
m!k3 hat gesagt.:
merci für die hilfe. also du meinst solange er auf den process wartet wäre dann mein status grün, und wenn ich den dienst beende, wäre der status rot - um es mal bildlich auszudrücken.

zu der Thread Lösung. Wäre das denn wirklich ratsam jeden Dienst als Thread zu starten?!

Hoi,

lies mal die API zu waitFor(9 😉 Google: "Java API Process".
waitFor() gibt 0 zurück, wenn der Process beendet ist, den Du gestartet hast mit Java.
Also der Java Process, nicht die Anwendung die Du startest.

Code:
            p = Runtime.getRuntime().exec("cmd /c  net send COMPUTER Hallo Du Sack!"); 
            try
            {
                if(p.waitFor() == 0)
                {
                    JOptionPane.showConfirmDialog(this, "Die Nachricht wurde fehlerfrei übermittelt",
                		"Versandbestätigung", JOptionPane.OK_CANCEL_OPTION);	            
                }
                else
                {
                    JOptionPane.showConfirmDialog(this, "Die Nachricht konnte nicht übermittelt werden",
                		"Versand fehlgeschlagen", JOptionPane.OK_CANCEL_OPTION);
                }

Hier geht das wunderbar, weil erst 0 zurückgegeben wird, wenn der net send fertig ist mit senden.
hab aber auch schon Beispiele gesehen, wo es nicht klappte, weil nur ein anderer Prozess gestartet wurde, das hat geklappt, er gab 0 zurück und der andere Prozess war eigentlich noch nicht mal richtig in Fahrt 😉

Zu der Thread-Geschichte:
Wenn Du Kontrolle über den Zustand der Anwendungen haben willst, musst Du es irgedwie als Process bzw Thread ausführen. 😉 Thread ist immer zu empfehlen, wenn es um mehr als eine "Aktion" handelt. Letztlich musst Du abwägen ob Du es brauchst 😉
(Mir fällt grad auf, dass ich den genauen Unterschied zwischen Thread und Process gar nicht kenne. Mal lesen gehen 🙂)

greetz
SLi
 
thE_29 hat gesagt.:
net start


Liefert dir alle laufenden Services zurück!

ah geil.. thx.. aber wie soll ichn die Rückgabe auswerten? Wie krieg ich das Ergebnis vom Dos Befehl zum einlesen? Steh aufm Schlauch.. :roll:
 
Runtime#exec gibt dir nen Process Object, da kannst du dir den InputStream holen (erstaunlicherweise heißt die passende Methode getInputStream()).
 
Illuvatar hat gesagt.:
Runtime#exec gibt dir nen Process Object, da kannst du dir den InputStream holen (erstaunlicherweise heißt die passende Methode getInputStream()).

okay.. das ist geil.. sag ich danke 😎
 
und kommt mir bloß ned auf die idee dass ich ja den dienst starten kann und wenns nicht geht es ihn nicht gibt.. das is scheisse.. ^^
 
Also, ob es den überhaupt gibt??

Tjo, Registry!

Dort stehn alle drinnen!!

Nur wennst dann schon eine dll brauchst, dann würde ich gleich die Services auch via WinApi überprüfen!!

Für Registry findet man genug externe Libs, wennst für die Dienst überprüfung keine dll findest, sag bescheid ich hab sowas geschrieben!
 
wie wo was.. dll um dienst zu überprüfen? ich kann doch die registry auslesen wenn ich weiß wo die dienste stehen.. hmm und wie WinAPI?.. hm.. komm grad nicht wirklich mit..
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben